【问题标题】:jScript - How to "mirror" a matrix (multidimensional array)jScript - 如何“镜像”矩阵(多维数组)
【发布时间】:2013-12-31 15:46:27
【问题描述】:

我最近的练习要求我这样做:

"给定一个 N*M 的多维数组(其中 N 是行,M 是列),如果多维数组可以被视为镜像,则创建一个返回 TRUE 的函数。如果该多维数组可以被视为 MIRROR,则数组[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 镜像中(不计算主对角线的元素),镜像元素的数量为 6,并且 3*2=6。在 5x5 镜像中,元素个数为 20,5*4=20 以此类推。我已经尝试了 7x7,但我猜这是一个可行的理论,所以我围绕这种可能性研究了我的函数。

帮忙,谢谢

【问题讨论】:

  • 你能发布一个输入/输出的例子吗?将矩阵传递给函数时,如何在 JS 中表示矩阵?
  • 您描述了一个要解决的问题。你有代码。究竟是什么在您需要帮助的代码中不起作用?
  • 我有一个无效的代码,否则我不会发布它 XD

标签: javascript arrays matrix multidimensional-array


【解决方案1】:

我的第一个观察是你只需要遍历矩阵的上半部分——例如检查了如果 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;
}

【讨论】:

    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2015-12-17
    • 2016-06-09
    • 2017-04-11
    相关资源
    最近更新 更多