规则: 比如1,2,3,4,5 / 4,5,1,2,3/ 2,3,4,5,1 /
5,1,2,3 ,这里最大值是5,最小值是1,逢5就到1了,满足这样条件就算顺子
arr.sort((a,b)=>a-b);
arr.every((t,i)=>{
return i==0?true:t-arr[i-1]==1?true:false
})
//参数,数组范围最小值,范围最大值
var mtest = function(min,max){
//这里min,max代表顺子的最大值与最小值,确定一个边界,如1-5
return arr=>{
arr.sort((a,b)=>a-b);
//如果数组最大值超过设定的最大值max,返回错误提醒
if(arr[arr.length-1]>max){
alert("数组元素最大值超过预期,错误");
return false;
}
var b = arr.every((m,n)=>n==0?true:m-arr[n-1]==1?true:false);
if(b)return true;//如果传进来的数组本身是[2,3,4]这样的连续递增的数据,返回true
//走到这里,索命传进来的数据不是连续的,那么可以判断没有的数据是不是连续的
//把1-5这几个元素看成一个圆环,取环上一段连续的数据,那么剩下的数据也必然是连续的
var arr1 = [];
//从[1,2,3,4,5]中检测[1,5,2]少了哪些数据
for(var i=min;i<max+1;i++){
arr.indexOf(i)<0 && arr1.push(i)
}
//arr1得到[3,4],然后检测arr1是不是连续的
return arr1.every((t,i)=>i==0?true:t-arr1[i-1]==1?true:false)
}
}(1,5);
mtest([1,5,2])
mtest([1,5,2,6])
mtest([3,2,4])
1.如果有固定位数,并且不太多的话,你可以先把所有满足的结果列举出来,存在一个数组里,然后用需要判断的变量与数组里的每一项比较。
2.如果不想列举的话,卧槽,兄弟你这规则有点奇怪啊,什么鬼都能叫顺子吗~~
10 回答11.1k 阅读
15 回答8.4k 阅读
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
重新编辑了: