输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
/** 顺时针打印* 1 2 3 4* 5 6 7 8* 9 10 11 12* 13 14 15 16* --->1 2 3 48 12 16 15 14 13 9 5 6 7 11 10*/
import java.util.ArrayList;public class Solution {public static void main(String[] args) {int[][] a= {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};ArrayList arr=printMatrix(a);for(int i=0;i printMatrix(int [][] matrix) {int hlen=matrix.length;//行数int llen=matrix[0].length;//列数boolean[][] flag=new boolean[hlen][llen];//标志位ArrayList val=new ArrayList();int i=0,j=0;//i是竖着————行标,j是横着-——列标while((j+10&&!flag[i-1][j])||(i+10&&!flag[i][j-1])) {//四个方向至少有一条是通的flag[i][j]=true;val.add(matrix[i][j]);if((j+10&&!flag[i-1][j])&&(j==0||flag[i][j-1])) {//上通,左不通,i-1System.out.println(matrix[i][j]+"上通");i--;continue;}if((i+10&&!flag[i][j-1])&&(i==hlen-1||flag[i+1][j])) {//左通,下不通,j-1System.out.println(matrix[i][j]+"左通");j--;continue;}}val.add(matrix[i][j]);return val; }
}
左神算法中的解决思路:
思想:一层一层处理

一层完后,有外层的左上点,到内层的左上点,进行下一层的处理

import java.util.ArrayList;public class ZuoSolu {public static void main(String[] args) {int[][] a= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};printMatrix(a);}public static void printMatrix(int[][] matrix){int m=matrix.length;int n=matrix[0].length;for(int i=0,j=0;(i<=m/2)&&(j<=n/2);i++,j++) {printEdge(matrix,i,m-i-1,j,n-j-1); }}public static void printEdge(int[][] arr,int hs,int he,int ls,int le) {if(hs==he) {//一行int i=ls;while(i<=le) {System.out.print(arr[hs][i]+" ");i++;}}else if(ls==le) {//一列int i=hs;while(i<=he) {System.out.print(arr[i][ls]+" ");i++;}}//矩形//打印上else{int i=ls;while(ils) {System.out.print(arr[he][i]+" ");i--;}//打印右i=he;while(i>hs) {System.out.print(arr[i][ls]+" ");i--;}}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
