作者:
链接:http://proprogrammar.com:443/article/858
声明:请尊重原作者的劳动,如需转载请注明出处
从扑克牌中随机抽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
限制:
数组长度为 5
数组的数取值为 [0, 13] .
难度:简单;标签:无;编程语言:C++
bool isStraight(vector<int>& nums) {
int n[14] = {0};
for(int i: nums){
n[i]++;
}
int a = 0;
int pre = 0;
for(int i = 1; i < 14; i++){
if(n[i] > 1)return false;
if(n[i] == 1){
if(pre)a+=i-pre-1;
pre=i;
}
}
return a <= n[0];
}
这题不难,根据题意做就可以,上面a是不连续的数量,n[0]是王的数量, pre是前一个数,如果不连续数量不大于王的数量,那么是可以的,另外如果有两张一样的,return false;
class Solution {
public:
bool isStraight(vector<int>& nums) {
bool flag=false;
int zero=0;
for(int i=0; i<5; i++){
for(int j=i+1;j<5;j++){
if(nums[i]>nums[j]){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
if(nums[i]==nums[j]&&nums[i]!=0) return false;
}
if(nums[i]==0) zero++;
}
if(zero>3) flag=true;
else{
int sub=nums[4]-nums[zero];
if(zero==0&&sub==4) flag=true;
if(zero!=0&&sub<=4) flag=true;
}
return flag;
}
};
这里先排序,排序时如果两张相同不是王,return false,同时记录王的数量,如果有3张以上的王,或者没王本身就是顺子或者有王王可以补缺,return true, 否则return false
亲爱的读者:有时间可以点赞评论一下
全部评论