本文主要是介绍LeetCode 756. 蛇形矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
输入两个整数 n n n和 m m m,输出一个 n n n行 m m m列的矩阵,将数字 1 1 1到 n × m n×m n×m按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数 n n n和 m m m。
输出格式
输出满足要求的矩阵。
矩阵占 n n n行,每行包含 m m m个空格隔开的整数。
数据范围
1 ≤ n , m ≤ 100 1≤n,m≤100 1≤n,m≤100
输入样例:
3 3
输出样例:
1 2 3
8 9 4
7 6 5
思路
这题之前好像见过,怎么搞的忘了
网上大佬思路:
代码
import java.util.Scanner;
public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);int n = sc.nextInt(), m = sc.nextInt();int[][] M = new int[100][100];int[][] d = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int l = -1, r = m, h = -1, b = n;int cnt = 0;for(int k = 1, i = 0, j = 0; k <= n * m; ){int ni = i + d[cnt][0], nj = j + d[cnt][1];if(nj == r) h ++;else if(ni == b) r --;else if(nj == l) b --;else if(ni == h) l ++;else{M[i][j] = k;k++;i = ni;j = nj;continue;}cnt = (cnt + 1) % 4;}for(int i = 0; i < n; i ++){for(int j = 0; j < m; j++){if(j != 0) System.out.print(" ");System.out.print(M[i][j]);}System.out.println();}}
}
y总代码
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(), m = sc.nextInt();int[][] res = new int[n][m];int[] dx = {-1, 0, 1, 0}, dy = {0, 1, 0, -1};int x = 0, y = 0, d = 1;for (int i = 1; i <= n * m; i ++ ) {res[x][y] = i;int a = x + dx[d], b = y + dy[d];if (a < 0 || a >= n || b < 0 || b >= m || res[a][b] > 0) {d = (d + 1) % 4;a = x + dx[d];b = y + dy[d];}x = a;y = b;}for (int i = 0; i < n; i ++ ) {for (int j = 0; j < m; j ++ )System.out.printf("%d ", res[i][j]);System.out.println();}}
}
这篇关于LeetCode 756. 蛇形矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!