【解题思路】
先对数组进行排序,计算0的个数为cnt0。从非0数开始计算,如果有两个相邻的数相等,必然不能构成顺子;如果相邻的两个数相差不为1,累加缺少的排的数量diffe。如果diffe为0,意味着不缺少排,或者cnt0>diffe,即0牌的数大于缺少的数量,则返回TRUE。
class Solution {
public boolean isStraight(int[] nums) {
int len = nums.length;
Arrays.sort(nums);
int cnt0 = 0, p = 0, diff = 0;
for(int i = 0; i < len; i++)
{
if(nums[i] == 0)
{
cnt0++;
p++;
}
}
for(int i = p + 1; i < len; i++)
{
if(nums[i]-nums[i-1] > 1)
{
diff += nums[i]-nums[i-1]-1;
}
else if(nums[i] == nums[i-1])
{
return false;
}
}
if(diff == 0 || cnt0 >= diff)
{
return true;
}
else
{
return false;
}
}
}