1. 题目描述
从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。
2 ~ 10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大、小王可以看成任意数字。
2. 思路分析
难度不大,可以将大小王看成数字 0,可以在任何不连续的两个数字之间做填充。
首先将原数组排序,然后统计任意数字(0)的出现次数。再遍历之后的数字,找出不相邻数字之间总共差多少个数字。
最后比较 0 的出现次数和总共差多少个数字,两者的大小关系。
注意:连续两个相同的数字是对子,不符合要求。
3. 代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
function isContinuous(numbers) { numbers.sort() const length = numbers.length
let zeroNum = 0 for (let i = 0; i < length && !numbers[i]; ++i) { ++zeroNum }
let interval = 0 for (let i = zeroNum + 1; i < length - 1; ++i) { if (numbers[i] === numbers[i + 1]) { return false } interval += numbers[i + 1] - numbers[i] - 1 }
return interval <= zeroNum }
console.log(isContinuous([3, 8, 0, 0, 1])) console.log(isContinuous([8, 10, 0, 6, 0]))
|