题目
输入一个数n,顺时针生成nxn的螺旋矩阵
示例
n=3
1 2 3
8 9 4
7 6 5
n=5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
代码
思路:边界坐标控制
//接收输入模块
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
})
//生成螺旋矩阵
function generate(n){
let arr=[]
for(let i=0;i<n;i++){
arr[i]=new Array(n).fill(0)
}
let max=n*n,row=0,col=0,left=0,right=n-1,top=0,bottom=n-1,direction='right'
for(let index=0;index<max;index++){
//console.log(`row:${row},col:${col},num:${index+1},direct:${direction}`)
arr[row][col]=index+1
if(direction==='right'){
if(col<right){
col++
}else{
top++
direction='bottom'
if(row<bottom){
row++
}
}
continue
}
if(direction==='bottom'){
if(row<bottom){
row++
}else{
right--
direction='left'
if(col>left){
col--
}
}
continue
}
if(direction==='left'){
if(col>left){
col--;
}else{
bottom--
direction='top'
if(row>top){
row--
}
}
continue
}
if(direction==='top'){
if(row>top){
row--
}else{
left++
direction='right'
if(col<right){
col++
}
}
continue
}
}
//输出
arr.forEach(d=>console.log(d.join('\t')))
}
readline.question(`请输入一个数:`, input => {
let n=parseInt(input)
generate(n)
readline.close()
})
测试运行