我最近的练习要求我这样做:
“给定一个 N*M 的多维数组(其中 N 是行,M 是列),创建一个函数,如果该多维数组可以被视为镜像,则返回 TRUE。如果满足以下条件,则该多维数组可以被视为镜像:数组[i][j]===数组[j][i]”。
我的想法非常基本(考虑数组已经初始化):
根据要求进行小修改---
var rows=prompt(), columns=prompt(); //I usually use an asknum() function
var matrix = new Array (rows);
function myMatrix (arr,col,rows){
for(i=0;i<arr.length;i++){
myArray[i] = new Array()
for(j=0;j<col;j++){
myArray[i][j]=asknum(); //this is a prompt function specified to insert numbers
}
}
myMatrix(matrix,columns,rows);
var isMirror=0; //counter to check if it is or is not a mirror
var getMatrix = function (rows,columns) {
if(rows===columns) {
return rows*(columns-1);
}
}
function findMirror (arr) {
for(i=0;i<arr.length;i++){
for(j=0;j<arr[i].length;j++){
if(arr[i][j]===arr[i.length-1-j][j.length-1-j] && i!=j){
isMirror++;
}
}
}
if(isMirror===getMatrix(rows,columns)){
return true;
} else {
return false;
}
}
findMirror(matrix);
2个可能的矩阵,以便您可以更好地理解我的思维方式:
3x3 5x5
[1,2,3] [1,2,3,4,5]
[2,1,2] [2,2,2,1,4]
[3,2,1] [3,2,3,2,3]
[4,1,2,4,2]
[5,4,3,2,1]
正如您自己所看到的,在 3x3 镜像中(不计算主对 Angular 线的元素),镜像元素的数量为 6,并且 3*2=6。在5x5镜像中,元素数量为20个,5*4=20以此类推。我已经尝试过 7x7,但我猜这是一个可行的理论,所以我围绕这种可能性研究了我的函数。
求助,谢谢<3
最佳答案
我的第一个观察是,您只需要迭代矩阵的上半部分 - 例如检查是否 array[1][2] == array[2][1],无需继续并检查 array[2][1] == array[1][2]。正如您已经注意到的那样,无需检查 array[x][x] == array[x][x] 是否。
其次,只要发现一个不匹配的元素,就可以立即返回 false。因此,没有必要计算匹配的数量,然后在最后检查计数。
最后,如果矩阵的维度不相同,那么它当然不可能是镜子。
这可能有效:
function checkMirror(arr) {
for (i=0; i<arr.length; i++) {
if (arr.length != arr[i].length) {
return false;
}
for (j=i+1; j<arr.length; j++) {
if (arr[i][j] !== arr[j][i]) {
return false;
}
}
}
return true;
}
关于javascript - jScript - 如何 "mirror"矩阵(多维数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20556937/