从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
示例 1:
输入: [1,2,3,4,5]
输出: True
示例 2:
输入: [0,0,1,2,5]
输出: True
排序的方法
#include
#include
#include
using namespace std;
class Solution {
public:
/**
* 判断给定的扑克牌数组是否是一个顺子
* @param nums 给定的扑克牌数组
* @return 如果是顺子,返回true;否则,返回false
*/
bool isStraight(vector<int>& nums) {
sort(nums.begin(), nums.end()); // 对扑克牌数组进行排序
int zero = 0; // 记录0的数量(大小王的数量)
for (int i = 0; i < 4; i++) {
if (nums[i] == 0) {
zero++; // 统计0的数量
continue;
}
if (nums[i] == nums[i + 1]) {
return false; // 存在对子,不是顺子,返回false
}
zero -= nums[i + 1] - nums[i] - 1; // 计算间隔并减去大小王的数量
}
return zero >= 0; // 如果剩余的大小王数量可以填补所有间隔,返回true;否则,返回false
}
};
int main() {
vector<int> nums = { 1, 2, 3, 4, 5 };
Solution solution;
bool result = solution.isStraight(nums);
cout << (result ? "true" : "false") << endl;
return 0;
}
运行结果:
true