js實現螺旋矩陣算法

Q:用0-9填充一個N*N的矩陣,該矩陣按順時針旋轉方向依次增大,用js編程輸出這個數組。要求以下:
圖片描述編程

個人思路是把矩形數組從外到裏分爲幾個環型數組,而後用這些環型數組給二維數組賦值,如圖所示:
圖片描述數組

部分代碼以下:oop

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);

輸出的兩個環型數組以下:
圖片描述spa

具體怎麼把這些環型數組輸出矩陣,這些工做還沒完成,最近實在是有點困了,明天再補上。3d

PS:我的以爲這個思路不是最優解,各位路過的高手若是有更好思路,望不吝賜教。code


最近偷懶了,補上完整代碼,不過忘了限制數字是0到9,稍微修改一下代碼便可。blog

請輸入代碼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(","));
}

圖片描述

相關文章
相關標籤/搜索