如何检查方矩阵的两个索引是否对角线。考虑数组。
[
0 , 1 , 2 , 3 ,
4 , 5 , 6 , 7 ,
8 , 9 , 10, 11,
12, 13, 14, 15
]
创建一个包含三个参数数组和两个索引的函数。如果两个索引彼此对角,则应返回true
,否则返回false
对于上述数组。
0,15 => true
3,12 => true
11,6 => true
9,6 => true
4,15 => false
8,12 => false
1,10 => false //my code fails for this.
我试图创建一个函数,但是根本无法正常工作。
function check(arr,a,b){
let len = Math.sqrt(arr.length);
let dif = Math.abs(a-b);
return dif % (len+1) === 0 || dif % (len - 1) === 0
}
可以给它一个简单的解决方案。
答案 0 :(得分:12)
只需获取col和row,并检查delta是否相同。
(实际上并不需要采用数组,所以我只是采用维度)
function check(dim,a,b){
let [x1,y1]=[Math.floor(a/dim),a%dim]
let [x2,y2]=[Math.floor(b/dim),b%dim]
return Math.abs(x1-x2)==Math.abs(y1-y2)
}
console.log(check(4,0,15))
console.log(check(4,3,12))
console.log(check(4,11,6))
console.log(check(4,9,6))
console.log(check(4,4,15))
console.log(check(4,8,12))
console.log(check(4,6,12))
答案 1 :(得分:5)
您可以采用绝对增量,然后与余数运算符一起检查增量是否为长度的整数倍减一或加一。
function check(array, i, j) {
var length = Math.sqrt(array.length),
delta = Math.abs(i - j),
lines = Math.abs(Math.floor(i / length) - Math.floor(j / length));
return delta === lines * (length - 1) || delta === lines * (length + 1);
}
var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
console.log(check(array, 0, 15)); // true
console.log(check(array, 3, 12)); // true
console.log(check(array, 11, 6)); // true
console.log(check(array, 9, 6)); // true
console.log(check(array, 4, 15)); // false
console.log(check(array, 8, 12)); // false
console.log(check(array, 8, 3)); // false
.as-console-wrapper { max-height: 100% !important; top: 0; }