从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。
2 ~ 10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大、小王可以看成任意数字。
难度不大,可以将大小王看成数字 0,可以在任何不连续的两个数字之间做填充。
首先将原数组排序,然后统计任意数字(0)的出现次数。再遍历之后的数字,找出不相邻数字之间总共差多少个数字。
最后比较 0 的出现次数和总共差多少个数字,两者的大小关系。
注意:连续两个相同的数字是对子,不符合要求。
/**** @param {Array} numbers*/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])); // falseconsole.log(isContinuous([8, 10, 0, 6, 0])); // true