螺旋打印二维数组(字节三面)

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
package com.csu.marden;

import java.util.ArrayList;
import java.util.List;

public class Demo2 {
	public static void main(String[] args) {
		int [][] arr={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
		show(diy_print(arr));
	}
	public static void show(List list){
		for(int i=0;i<list.size();i++){
			System.out.print(list.get(i)+"  ");
		}
	}
	
	public static List diy_print(int [] [] arr){
		ArrayList<Integer> list=new ArrayList<>();
		if(arr==null || arr.length==0 || arr[0].length==0){
			return list;
		}
		//定义方向
		int [] dx={0,1,0,-1};
		int [] dy={1,0,-1,0};
		//定义方向索引
		int d=0;
		int n=arr.length;
		int m=arr[0].length;
		int x=0;
		int y=0;
		boolean [][] visited=new boolean[n][m];
		while(list.size()<n*m){
			list.add(arr[x][y]);
			visited[x][y]=true;
			//寻找下一个位置的坐标
			int nx=x+dx[d];
			int ny=y+dy[d];
			if(nx<m && nx>=0 && ny<n && ny>=0 && !visited[nx][ny]){
				x=nx;
				y=ny;
				continue;
			}else{
				d=(d+1)%4;
				nx=x+dx[d];
				ny=y+dy[d];
				x=nx;
				y=ny;
			}
		}
		return list;
	}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值