逻辑算法简单



我在做一些算法挑战。我取一个数字,将其转换为字符串,然后转换为数组,并逐一检查其每个元素。下面的代码在javascript上工作。目标是,如果所有的数字都是if语句中的数字,那么函数应该返回true。但如果有7或任何其他值,则该函数将返回false。

var a = myFunction(3);
if(a === true){
alert("true");
}
else{
alert("false");
}
function myFunction(number){
let array = number.toString().split("");

for(var i = 0; i<array.length; i++){
if(array[i] !== '0' && array[i] !== '1' && array[i] !== '8' && array[i] !== '5' && array[i] !== '2'){
return false;
}
}
return true;
}

我被下面的逻辑卡住了。

if(array[i] !== '0' && array[i] !== '1' && array[i] !== '8' && array[i] !== '5' && array[i] !== '2')

如果我将'&&'更改为'||',为什么它不能正常工作?我对事实感到困惑,如果array[I] = 1,那么它应该是false,因为array[I] !== 0或8或if语句上的其他数字。

结合De Morgan定律取逻辑或||:

!(a && b) = !a || !b 
!(a || b) = !a && !b

function check(number) {
let array = number.toString().split("");
for (var i = 0; i < array.length; i++) {
if (!(array[i] === '0' || array[i] === '1' || array[i] === '8' || array[i] === '5' || array[i] === '2')) {
return false;
}
}
return true;
}
console.log(check(18520));
console.log(check(7));

const inclusive = set => test => (test + '')
.split('')
.filter(value => set.includes(parseInt(value, 10)))
.length > 0
let test = inclusive([0,1,2,5,8])
console.log('3: ' + test(3))
console.log('321: ' + test(321))
console.log('830: ' + test(830))

最新更新