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(",")); }