haizlin/fe-interview

[js] 第546天 写一个方法判断一组数字是连值

Opened this issue · 7 comments

第546天 写一个方法判断一组数字是连值

3+1官网

我也要出题

比如[1,2,3,4],[9,0,1,2],这样的连值组合?连值是指12345678901234567890这样的数字相连的组合,像[1,2,3,4,5]是连值,但[1,3,4,5,6]不是,因为没有相连。
注:9和0相连
比如随便给你一组数,如果满足连值,则返回true

const isSerial = (arr) => {
            for (let i = 1; i < arr.length; i++) {
                if (Math.abs(arr[i] - arr[i - 1]) !== 1 && !(arr[i] === 9 && arr[i - 1] === 0) && !(arr[i] === 0 && arr[i - 1] === 9)) {
                    return false;
                }
            }
            return true;
        }
L-T-G commented

var judge = value => {
var flag = 0;
for(var i=0 ,length = value.length;i<length;i++)
{
if(value[i+1])
{
res = value[i+1] - value[i];
if(res == 1 || res == -9) {flag++;}
}
else {break;}
}
if(flag==i){ return true;}
else{return false;}
}

function isSerial(arr){
var length = arr.length;
if(length ===0 || length === 1){
return true
}else {
while(length>=2){
if(arr[length-1] - arr[length-2] !== 1 && arr[length - 1] - arr[length-2] !== -9){
return false
}
length--
}
return true
}
}

function isSerial(arr) {
for(let i = 0; i < arr.length-1; i++) {
if(arr[i+1] != (arr[i] + 1)%10) return false;
}
return true;
}

// 可判断的连值类型如下: '0123456789012'   [9,0,1,2,3] [-9,0,-1,-2,-3,-4]  '98765432109'  [-2,-1,0,-9,-8,-7]
    function toArray (data) {
        return Array.from(data)
    }
    function isSeries(data) {
        if (!Array.isArray(data)) {
            data = toArray(data)
        }
        if (!data.length) return false // 没有数据直接返回false
        let srData = data.slice(0, data.length - 1)
        return srData.every((item, index) => {
            if (Math.abs(item) == 9 && (data[index + 1] == 0 || data[index - 1] == 0)) return true
            if (Math.abs(item) == 0 && (Math.abs(data[index + 1]) == 9 || Math.abs(data[index - 1]) == 9)) return true
            if (index === srData.length) {
                return 1 === Math.abs(data[data.length] - item)
            }
            return 1 === Math.abs(data[index + 1] - item)
        })
    }

[1,2,3,4,5].every((t, i, arr) => i === 0 || (t - arr[i - 1] === 1 || arr[i - 1] - t === 9));

function testArr(arr) { 
  let min=arr[0]
  return arr.every((item,index)=> item===(min+index)%10)
 }