算法1
能组成顺子需要满足的两个条件是:
- 除了0以外不能出现两个相同的数字;
- 排序后两个相邻数字的差值不能大于0的个数。
按照这两个条件进行判断即可。
C++ 代码
class Solution {
public:
bool isContinuous( vector<int> numbers ) {
if(numbers.size()!=5)
return false;
sort(numbers.begin(), numbers.end());
int zerocnt = 0;
for(int i = 0;i<4;i++){
if(numbers[i]==0)
zerocnt += 1;
else{
if(numbers[i+1]-numbers[i]-1>zerocnt)//相邻数字间隔大于0的个数
return false;
if(numbers[i+1]==numbers[i])//有对子
return false;
zerocnt -= numbers[i+1] - numbers[i]-1;
}
}
return true;
}
};
先把1和0特殊处理,插入到正确的位置
class Solution {
public boolean isContinuous(int [] numbers) {
Arrays.sort(numbers);
int cz=0;
for(int i=numbers.length-1;i>0;i–){
if(numbers[i-1]!=0&&numbers[i]==numbers[i-1])return false;
if(numbers[i-1]!=0){
cz+=numbers[i]-numbers[i-1];
}else{
break;
}
}
return cz==4;
}
}
应该没有这么费劲吧
这个题解没办法判断循环的顺子 [1, 10, 11, 12, 13]
我理解的这道题的题意好像不把循环的顺子认为是顺子呀
你这种就把1变成14再去判断吧,参考代码