螺旋打印二维数组-java

算法笔记 专栏收录该内容
15 篇文章 0 订阅

题目:

螺旋打印二维数组。

解题思路:

问题点:怎么构建一个螺旋的二维数组

1     2     3    4

12  13  14    5

11   16  15   6

10   9     8    7

分析:

1、构建一个二维数组,按照顺时针的方向依次填入矩阵中1、2、3、4、5、6、7、8、9……

  • 问题拆分:
  • 先搞最外面一层,再搞下一层,依次类推,直到数组被填充完,重点是怎么判断边界和方向

2、边界判断

  • 矩阵:matrix;矩阵大小:n(n*n矩阵全部初始化为0);行:i表示; 列:j表示(i=0, j=0);方向:上下左右
  • 边界判断:
  • 右边界:matrix[ i ][ j+1 ] == 0; // 行i不变,列j每次+1(==0说明不到右边界,如果到了右边界,行i+1,列不变,方向改成下)

  • 下边界:matrix[ i+1 ][ j ] == 0; // 行i每次+1,列j不变(==0说明不到下边界,如果到了下边界,行不变,列j-1,方向改成左)

  • 左边界:matrix[ i ][ j-1 ] == 0; //行i不变,列j每次-1(==0说明不到左边界,如果到了左边界,行i-1,列j不变,方向改成上)

  • 上边界:matrix[ i-1 ][ j ] == 0; //行每次-1,列不变(==0说明不到上边界,如果到了上边界,行不变,列j+1,方向改成右)


public class Untitled {
    public static void main(String []args) {
		int n = 4;
		int[][] matrix = new int[n][n];
		int right = 1, down = 2, left = 3, up = 4;
		int direction = right;
		int i = 0, j = 0;
		int step = 0;
		for(step = 1; step <= n*n; step ++){
			matrix[i][j] = step;
			
			// 左 - 右
			if(direction == right){
				if(j+1 < n && matrix[i][j+1] == 0){
					j ++;
				}else{
					i ++;
					direction = down;
					continue;
				}
			}
			
			// 上 - 下
			if(direction == down){
				if(i + 1 < n && matrix[i+1][j] == 0){
					i ++;
				}else{
					j --;
					direction = left;
					continue;
				}
			}
			
			// 右 - 左
			if(direction == left){
				if(j - 1 >= 0 && matrix[i][j-1] == 0){
					j --;
				}else{
					i --;
					direction = up;
					continue;
				}
			}
			
			// 下 - 上
			if(direction == up){
				if(i - 1 >= 0 && matrix[i-1][j] == 0){
					i --;
				}else{
					j ++;
					direction = right;
					continue;
				}
			}
		}
		
		for(int row = 0; row < n; row ++){
			for(int col = 0; col < n; col ++){
				System.out.print(matrix[row][col]);
				System.out.print("\t");
			}
			System.out.println();
		}
		
    }
}

 

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值