剣指Offer 61.トランプの順子


剣指Offer 61.トランプの順子

タイトルの説明:


トランプからランダムに5枚引いて、順子かどうかを判断します.つまり、この5枚のカードが連続しているかどうかを判断します.2~10は数字そのもの、Aは1、Jは11、Qは12、Kは13、大、王は0と任意の数字と見なすことができる.Aは14と見なされない.

例:


入力:[1,2,3,4,5]出力:True
入力:[0,0,1,2,5]出力:True

考え方:


配列の最大数と最小数を直接取得するには、配列をソートする以上の条件は0を除去する必要があるため、配列のfilterメソッドを使用して配列中の0をフィルタリングして最大数と最小数を取得した後、それらの差が4より大きいかどうかを判断し、4より大きいと問題にならないかを判断し、falseに戻って新しい配列を遍歴して重複した数字があるかどうかを判断し、重複があれば問題に合わず、false以上を返しても通過すると判断します.説明が題意に合致し、trueを返す

コード:

var isStraight = function (nums) {
     
  //    nums         ,       0   
  nums = nums.sort((a, b) => a - b).filter(item => item !== 0)
  //              ,         ,           4,          
  if (nums[nums.length - 1] - nums[0] > 4) return false 

  //               ,      i + 1,            -1
  for (let i = 0; i < nums.length - 1; i++) {
     
    if (nums[i] === nums[i + 1]) return false
  }
  return true
};