题目描述

解题思路
- 本题采用的是通过零数组来辅助判断是否是顺子
- 具体的过程,代码注释中都有
解题代码
var isStraight = function (nums) {
const zeroArr = [];
nums.sort((num1, num2) => num1 - num2);
for (let i = 0; i < nums.length; i++) {
if (nums[i] === 0) {
zeroArr.push(nums[i]);
}
}
nums = nums.filter(value => value !== 0);
if ([...new Set(nums)].length !== nums.length) return false;
for (let i = 1; i < nums.length; i++) {
if (nums[i] - nums[i - 1] === 1) {
continue;
} else if (nums[i] - nums[i - 1] > 1) {
if (zeroArr.length === 0) return false;
if (zeroArr.length >= nums[i] - nums[i - 1] - 1) {
for (let j = 0; j < nums[i] - nums[i - 1] - 1; j++) {
zeroArr.pop();
}
} else {
return false;
}
}
}
return true;
};
总结(本题给我们的启示思路)
- 启示一:学会使用辅助数组来判断目标元素
- 启示二:学会通过集合给数组进行去重
- 启示三:学会通过filter进行过滤数组