leecoode59螺旋矩阵——带有调试代码
我的题解
关键就是如何去找这个循环,如何去遍历,我刚开始想到了以圈来进行遍历
但是问题是我并没有想到是四个循环分别是遍历四条边
我想的是通过一个循环来四条边,i=1的时候遍历第一条边,然后i=2的时候遍历第二条边...
上面的也能做出来,但是你会发现这个完全是没必要的,因为你要通过if语句来进行判断这个循环是哪一条边
if(k==1){
for(i=circle,j=circle;j<n-1-circle;j++){
arr[i][j]=num++; //对其进行赋值
}
}
if(k==2){
for(i=circle;i<n-1-circle;i++){
arr[i][j]=num++;
}
}
...类似这种,完全没必要
class Solution {
public int[][] generateMatrix(int n) {
//暴力解法
//首先肯定是要进行遍历好n^2次
int[][] arr = new int[n][n];
int circle = 0;
int i=0,j=0;
int num=1;
while(circle<n/2){
//定义四个循环,然后每个循环处理一条边
for(i=circle,j=circle;j<n-1-circle;j++){
arr[i][j]=num++; //对其进行赋值
}
for(i=circle;i<n-1-circle;i++){
arr[i][j]=num++;
}
for(j=n-1-circle;j>circle;j--){
arr[i][j]=num++;
}
for(i=n-circle-1;i>circle;i--){
arr[i][j]=num++;
}
circle++;//圈数加一
}
if(n%2==1){
arr[n/2][n/2]=num;
}
return arr;
}
}
完整代码带有测试代码
public class 螺旋矩阵 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入这个n");
int n= input.nextInt();
int [][] arr = generateMatrix(n);
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");;
}
System.out.println();
}
input.close();
}
public static int[][] generateMatrix(int n) {
//暴力解法
//首先肯定是要进行遍历好n^2次
int[][] arr = new int[n][n];
int circle = 0;
int i=0,j=0;
int num=1;
while(circle<n/2){
//定义四个循环,然后每个循环处理一条边
for(i=circle,j=circle;j<n-1-circle;j++){
arr[i][j]=num++; //对其进行赋值
}
for(i=circle;i<n-1-circle;i++){
arr[i][j]=num++;
}
for(j=n-1-circle;j>circle;j--){
arr[i][j]=num++;
}
for(i=n-circle-1;i>circle;i--){
arr[i][j]=num++;
}
circle++;//圈数加一
}
if(n%2==1){
arr[n/2][n/2]=num;
}
return arr;
}
}
本文作者:TranquilGlow
本文链接:https://www.cnblogs.com/xuehaiqiule/p/17621632.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步