如何逆时针螺旋排列数组-Javascript var sampleArray=[[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16], [17,18,19,20] ]; 函数printSpiral(myArray,顺时针){ //逆时针: //1,5,9,13,17, 18,19,20, 16,12,8,4, 3,2, 6,10,14, 15,11,7 如果(!顺时针){ myArray=转置(myArray) //console.log(myArray) } var rows=myArray.length; var cols=myArray[0]。长度; 如果(行=0;colIdx--){ 纽罗=[]; 对于(rowIdx=1;rowIdx

如何逆时针螺旋排列数组-Javascript var sampleArray=[[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16], [17,18,19,20] ]; 函数printSpiral(myArray,顺时针){ //逆时针: //1,5,9,13,17, 18,19,20, 16,12,8,4, 3,2, 6,10,14, 15,11,7 如果(!顺时针){ myArray=转置(myArray) //console.log(myArray) } var rows=myArray.length; var cols=myArray[0]。长度; 如果(行=0;colIdx--){ 纽罗=[]; 对于(rowIdx=1;rowIdx,javascript,arrays,Javascript,Arrays,我正在尝试以螺旋方式但逆时针方式打印阵列。我曾尝试转置矩阵,但这无助于如何打印以下数组 //1,5,9,13,17,18,19,20,16,12,8,4,3,2,6,10,14,15,11,7 请帮助这不是很优雅,但下面是算法的要点: var sampleArray = [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16],

我正在尝试以螺旋方式但逆时针方式打印阵列。我曾尝试转置矩阵,但这无助于如何打印以下数组

//1,5,9,13,17,18,19,20,16,12,8,4,3,2,6,10,14,15,11,7


请帮助

这不是很优雅,但下面是算法的要点:

var sampleArray = [[1,2,3,4],
                  [5,6,7,8],
                  [9,10,11,12],
                  [13,14,15,16],
                  [17,18,19,20]
                  ];


function printSpiral(myArray, clockwise) {
  //anti-clockwise:
  //1,5,9,13,17, 18,19,20, 16,12,8,4, 3,2, 6,10,14, 15,11,7


   if(!clockwise) {

     myArray = transpose(myArray)

     //console.log(myArray)
  }

  var rows = myArray.length;

  var cols = myArray[0].length;
  if(rows <= 1) {
    return myArray[0];
  }

  if(cols === 0) {
    return myArray[0];
  }



      var firstRow = myArray[0]; 
      var newMatrix = [];
      var newRow;
      var rowIdx;
      var colIdx = myArray[1].length - 1;


  for(colIdx; colIdx >=0; colIdx--) {

      newRow = [];

     for(rowIdx = 1; rowIdx < rows; rowIdx++) {
       newRow.push(myArray[rowIdx][colIdx])
       //console.log(newRow)
     }

    newMatrix.push(newRow)
  }


  //console.log(newMatrix)

  firstRow.push.apply(firstRow,printSpiral(newMatrix));

  //console.log(firstRow)

  return firstRow


  //return newMatrix


  // Spiral Order
  // 1,2,3,4, 8,12,16,20, 19,18,17, 13,9,5, 6,7, 11,15, 14, 10

}

var result = printSpiral(sampleArray, false);

console.log(result)

变量数组=[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
[17,18,19,20]];
函数螺旋(阵列){
var列表=[];
var数组=数组[0]。映射(函数(列,i){
返回数组.map(函数(行){
返回行[i]
})
});
list.push(数组[0]);
数组.shift()
while(数组的类型[0]!==“未定义”){
var数组=数组[0]。映射(函数(列,i){
返回数组.map(函数(行){
返回行[i]
})
});
array.reverse();
list.push(数组[0]);
数组。shift();
}
返回列表
}
变量列表=螺旋(数组)
文件记录(列表);
基本上,想法如下,逆时针旋转90度是通过转置和翻转完成的。然后我们弹出最上面一行,然后再做一次。 因此,我们转置数组array.reverse来翻转它,将我们的行放入一个列表array.shift来弹出该行,重复


这种方法的另一个主要好处是它不会关心数组的维数。它们可以是不对称的,也可以是非对称的。

这不是很优雅,但下面是算法的要点:

var sampleArray = [[1,2,3,4],
                  [5,6,7,8],
                  [9,10,11,12],
                  [13,14,15,16],
                  [17,18,19,20]
                  ];


function printSpiral(myArray, clockwise) {
  //anti-clockwise:
  //1,5,9,13,17, 18,19,20, 16,12,8,4, 3,2, 6,10,14, 15,11,7


   if(!clockwise) {

     myArray = transpose(myArray)

     //console.log(myArray)
  }

  var rows = myArray.length;

  var cols = myArray[0].length;
  if(rows <= 1) {
    return myArray[0];
  }

  if(cols === 0) {
    return myArray[0];
  }



      var firstRow = myArray[0]; 
      var newMatrix = [];
      var newRow;
      var rowIdx;
      var colIdx = myArray[1].length - 1;


  for(colIdx; colIdx >=0; colIdx--) {

      newRow = [];

     for(rowIdx = 1; rowIdx < rows; rowIdx++) {
       newRow.push(myArray[rowIdx][colIdx])
       //console.log(newRow)
     }

    newMatrix.push(newRow)
  }


  //console.log(newMatrix)

  firstRow.push.apply(firstRow,printSpiral(newMatrix));

  //console.log(firstRow)

  return firstRow


  //return newMatrix


  // Spiral Order
  // 1,2,3,4, 8,12,16,20, 19,18,17, 13,9,5, 6,7, 11,15, 14, 10

}

var result = printSpiral(sampleArray, false);

console.log(result)

变量数组=[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
[17,18,19,20]];
函数螺旋(阵列){
var列表=[];
var数组=数组[0]。映射(函数(列,i){
返回数组.map(函数(行){
返回行[i]
})
});
list.push(数组[0]);
数组.shift()
while(数组的类型[0]!==“未定义”){
var数组=数组[0]。映射(函数(列,i){
返回数组.map(函数(行){
返回行[i]
})
});
array.reverse();
list.push(数组[0]);
数组。shift();
}
返回列表
}
变量列表=螺旋(数组)
文件记录(列表);
基本上,想法如下,逆时针旋转90度是通过转置和翻转完成的。然后我们弹出最上面一行,然后再做一次。 因此,我们转置数组array.reverse来翻转它,将我们的行放入一个列表array.shift来弹出该行,重复


这种方法的另一个主要好处是它不会关心数组的维数。它们可以是不对称的。

我不确定您的测试用例,但您可以这样做:它始终是4X4矩阵还是可以是6X6?@RomanPerekhrest可以是6*6?我也不确定您的测试用例,但您可以这样做:它始终是4X4矩阵还是可以是6X6?@RomanPerekhrest也可以是6*6