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