Q:用0-9填充一个N*N的矩阵,该矩阵按顺时针旋转方向依次增大,用js编程输出这个数组。要求如下:

我的思路是把矩形数组从外到里分为几个环型数组,然后用这些环型数组给二维数组赋值,如图所示:

部分代码如下:

function circleNum(n){
    var loop = Math.round(n/2);
    var index = 0;
    for(var j=0;j<loop;j++){
        var arr1 = [];
    for(var i=0;i<4*(n-1);i++){
        var ele = i%10;
        if(index==0){
            arr1.push(ele);
        }else{
            arr1.push(++index);
        }

    }
    if(n==1){
    arr1.push(++index);
}
    console.log(arr1);
    n-=2;
    index = arr1[arr1.length-1];
    }
}
circleNum(4);

输出的两个环型数组如下:

具体怎么把这些环型数组输出矩阵,这些工作还没完成,最近实在是有点困了,明天再补上。

PS:个人觉得这个思路不是最优解,各位路过的高手如果有更好思路,望不吝赐教。


最近偷懒了,补上完整代码,不过忘了限制数字是0到9,稍微修改一下代码即可。

请输入代码const array = new Array();
let count = -1;
function produceArray(n,start){
if(count==-1){
    count = n;
}

if(start==0){
    for(let i=0;i<n;i++){
      array[i] = [];
      for(let j=0;j<n;j++){
        array[i].push(0);
    }
  }
}

if(count!=2&&count%2==0&&n==2){
    return;
}
if(n==1&&count%2!=0){
    const index = (count-1)/2;
    array[index][index] = count*count-1;
  return;
}


  let increaseNum = start;
  if(n<=0){
  return;
  }
      for(let i=count-n;i<n-1;i++){
      array[i][count-n] = increaseNum++;
  }
  for(let i=count-n;i<n-1;i++){
      array[n-1][i] = increaseNum++;
  }
  for(let i=n-1;i>count-n;i--){
      array[i][n-1] = increaseNum++;
  }
  for(let i=n-1;i>count-n;i--){
      array[count-n][i] = increaseNum++;
  }


  produceArray(n-1,increaseNum)
}

produceArray(n,0); //此处可给n赋值即可,比如生成5*5矩阵,n就等于5
for(let i=0;i<array.length;i++){
    console.log(array[i].join(","));
}

03-05 18:26