链接
题解
首先将数组进行排序,然后遍历数组,记录数组中万能牌(0)的数量,遍历完万能牌后,遍历非万能牌,若某一非万能牌的下一张牌与其相等,则该数组必然不为顺子,后续如果牌不连续,则记录空缺位置,直到遍历完数组,然后比较万能牌是否大于等于空缺位的数量,大于等于则为顺子,反之则不为顺子。
代码
public boolean isStraight(int[] nums)
{
//首先将数组排序
Arrays.sort(nums);
int zero = 0; //万能癞子
int diff = 0;
for (int i = 0; i < nums.length - 1; i++)
{
if (0 == nums[i])
{
zero++;
} else
{
//不是癞子
if (nums[i] == nums[i + 1])
{
//索引为 i 的数与其下一个数相同,即为不连续
return false;
}
if (nums[i] + 1 != nums[i + 1])
{
diff += nums[i + 1] - nums[i] - 1;
}
}
}
return zero >= diff;
}