LeetCode(剑指 Offer)- 61. 扑克牌中的顺子
Posted 放羊的牧码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(剑指 Offer)- 61. 扑克牌中的顺子相关的知识,希望对你有一定的参考价值。
题目链接:点击打开链接
题目大意:略
解题思路
相关企业
- 字节跳动
AC 代码
- Java
// 解决方案(1)
class Solution
public boolean isStraight(int[] nums)
Set<Integer> repeat = new HashSet<>();
int max = 0, min = 14;
for(int num : nums)
if(num == 0) continue; // 跳过大小王
max = Math.max(max, num); // 最大牌
min = Math.min(min, num); // 最小牌
if(repeat.contains(num)) return false; // 若有重复,提前返回 false
repeat.add(num); // 添加此牌至 Set
return max - min < 5; // 最大牌 - 最小牌 < 5 则可构成顺子
// 解决方案(2)
class Solution
public boolean isStraight(int[] nums)
int joker = 0;
Arrays.sort(nums); // 数组排序
for(int i = 0; i < 4; i++)
if(nums[i] == 0) joker++; // 统计大小王数量
else if(nums[i] == nums[i + 1]) return false; // 若有重复,提前返回 false
return nums[4] - nums[joker] < 5; // 最大牌 - 最小牌 < 5 则可构成顺子
// 解决方案(3)
class Solution
public boolean isStraight(int[] nums)
// 计数排序思想
int[] count = new int[14];
for (int i = 0; i < nums.length; i++)
count[nums[i]]++;
if (count[nums[i]] > 1 && nums[i] != 0)
return false;
// 查找左右区间
boolean flagL = true, flagR = false;
int idxL = -1, idxR = -1;
for (int i = 1; i < count.length; i++)
if (flagL && count[i] == 1)
idxL = i;
flagL = false;
flagR = true;
else if (flagR && count[i] == 1)
idxR = i;
// 计算缺少坑位数
int needCnt = 0;
for (int i = idxL; i <= idxR; i++)
if (count[i] == 0)
needCnt++;
return needCnt <= count[0];
- C++
// 解决方案(1)
class Solution
public:
bool isStraight(vector<int>& nums)
unordered_set<int> repeat;
int ma = 0, mi = 14;
for(int num : nums)
if(num == 0) continue; // 跳过大小王
ma = max(ma, num); // 最大牌
mi = min(mi, num); // 最小牌
if(repeat.find(num) != repeat.end()) return false; // 若有重复,提前返回 false
repeat.insert(num); // 添加此牌至 Set
return ma - mi < 5; // 最大牌 - 最小牌 < 5 则可构成顺子
;
// 解决方案(2)
class Solution
public:
bool isStraight(vector<int>& nums)
int joker = 0;
sort(nums.begin(), nums.end()); // 数组排序
for(int i = 0; i < 4; i++)
if(nums[i] == 0) joker++; // 统计大小王数量
else if(nums[i] == nums[i + 1]) return false; // 若有重复,提前返回 false
return nums[4] - nums[joker] < 5; // 最大牌 - 最小牌 < 5 则可构成顺子
;
以上是关于LeetCode(剑指 Offer)- 61. 扑克牌中的顺子的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode(剑指 Offer)- 61. 扑克牌中的顺子
[LeetCode]剑指 Offer 52. 两个链表的第一个公共节点
LeetCode(剑指 Offer)- 56 - I. 数组中数字出现的次数