编写函数实现js输出旋转矩阵

比如,参数是2,输出矩阵

1 2
4 3

参数是3,输出:

1 2 3
8 9 4
7 6 5


请尝试用js编写一个这样的方法!!!求解。

阅读 5k
3 个回答
function hehe(n) {
      var item = new Array(n);
      var ceng = [];
      for(var i = 0; i < n; i ++) {
        var h = item[i] = new Array(n);
        for(var j = 0; j < n; j ++) {
          var en = Math.min(i,j,n-1-j,n-1-i);
          var hai = 0;
          for(var k = 0; k < en; k ++) {
            hai += haha(n - en + 1);
          }
          h[j] = hai + lala(i-en, j-en, n-en*2);
        }
      }
      for(var i = 0; i < n; i ++) {
        console.log(item[i].join(' '));
      }
    }
    function lala(x,y,n){
      if(n < 1) n = 1;
      if(x === 0){
        return y + 1;
      }else if(y === n-1){
        return n + x;
      }else if(x === n-1){
        return 3*n - y - 2;
      }else if(y === 0){
        return haha(n) - x + 1;
      }
    }
    function haha(x) {
      return (x - 1) * 4;
    }
//调用
hehe(10);
function getMatrix(n) {
    var matrix = Array.from({length: n }, function() {return []});
    var num = 1,
        rowbegin = 0,
        rowend = n - 1,
        colbegin = 0,
        colend = n - 1;
    while (rowbegin <= rowend && colbegin <= colend) {
        for (var i = colbegin; i <= colend; i++) matrix[rowbegin][i] = num++;
        rowbegin++;

        for (var i = rowbegin; i <= rowend; i++) matrix[i][colend] = num++;
        colend--;

        for (var i = colend; i >= colbegin; i--) matrix[rowend][i] = num++;
        rowend--;

        for (var i = rowend; i >= rowbegin; i--) matrix[i][colbegin] = num++;
        colbegin++;
    }
    return matrix

}

console.log(getMatrix(3))

function matrix(n) {
    var start = 0;
    var result = [];
    var length = n;
    var tmp = 0;
    for (var i = 0; i < length; i++) {
      result.push([]);
    };

    while (length > start * 2) {
        var end = length - 1 - start;
        //第一行
        for (var i = start; i <= end; i++) {
          result[start][i] = ++tmp;
        }

        if (start < end) {
          //由上到下
          for (var i = start + 1; i <= end; i++) {
            result[i][end] = ++tmp;
          }
          //最后一行
          for (var i = end - 1; i >= start; i--) {
            result[end][i] = ++tmp;
          }
        }
        //由下到上
        if (start < end - 1) {
            for (var i = end - 1; i >= start + 1; i--) {
              result[i][start] = ++tmp;
            }
        }
        start++;
    }
    return result
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题