天天看點

劍指Offer——撲克牌中的順子(JS實作)

題目描述

劍指Offer——撲克牌中的順子(JS實作)

解題思路

  • 本題采用的是通過零數組來輔助判斷是否是順子
  • 具體的過程,代碼注釋中都有

解題代碼

var isStraight = function (nums) {
    // 将nums數組中所有0元素放入下面的數組中
    const zeroArr = [];
    // 将數組從小到大進行排序
    nums.sort((num1, num2) => num1 - num2);
    // 将含零的元素添加到0的數組中
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] === 0) {
            zeroArr.push(nums[i]);
        }
    }
    // 将nums數組中的0全部過濾掉
    nums = nums.filter(value => value !== 0);
    // 如果nums數組中含有重複元素,說明不是順子,直接傳回false
    if ([...new Set(nums)].length !== nums.length) return false;
    // 周遊nums的所有非零元素
    for (let i = 1; i < nums.length; i++) {
        // 如果後一個比前一個大一,說明屬于順子,繼續判斷
        if (nums[i] - nums[i - 1] === 1) {
            continue;
        } else if (nums[i] - nums[i - 1] > 1) {
            // 如果後一個比前一個大的多,首先判斷0數組中是否有元素,沒有則傳回false
            if (zeroArr.length === 0) return false;
            // 如果有0元素,則判斷零的個數是否能夠填補空缺的數字
            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進行過濾數組

繼續閱讀