输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
生活随笔
收集整理的這篇文章主要介紹了
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
/** 順時(shí)針打印* 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<Integer> arr=printMatrix(a);for(int i=0;i<arr.size();i++) {System.out.print(arr.get(i)+" ");}}public static ArrayList<Integer> printMatrix(int [][] matrix) {int hlen=matrix.length;//行數(shù)int llen=matrix[0].length;//列數(shù)boolean[][] flag=new boolean[hlen][llen];//標(biāo)志位ArrayList<Integer> val=new ArrayList<Integer>();int i=0,j=0;//i是豎著————行標(biāo),j是橫著-——列標(biāo)while((j+1<llen &&!flag[i][j+1])||(i>0&&!flag[i-1][j])||(i+1<hlen&&!flag[i+1][j])||(j>0&&!flag[i][j-1])) {//四個(gè)方向至少有一條是通的flag[i][j]=true;val.add(matrix[i][j]);if((j+1<llen &&!flag[i][j+1])&&(i==0||flag[i-1][j])) {//右通,上不通,j+1System.out.println(matrix[i][j]+"右通");j++;continue;}if((i>0&&!flag[i-1][j])&&(j==0||flag[i][j-1])) {//上通,左不通,i-1System.out.println(matrix[i][j]+"上通");i--;continue;}if((i+1<hlen&&!flag[i+1][j])&&(j+1==llen||flag[i][j+1])) {//下通,右不通,i+1System.out.println(matrix[i][j]+"下通");i++;continue;}if((j>0&&!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; }
}
?
?
?
左神算法中的解決思路:
思想:一層一層處理
?
一層完后,有外層的左上點(diǎn),到內(nèi)層的左上點(diǎn),進(jìn)行下一層的處理
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(i<le) {System.out.print(arr[hs][i]+" ");i++;}//打印右i=hs;while(i<he) {System.out.print(arr[i][le]+" ");i++;}//打印下i=le;while(i>ls) {System.out.print(arr[he][i]+" ");i--;}//打印右i=he;while(i>hs) {System.out.print(arr[i][ls]+" ");i--;}}} }?
總結(jié)
以上是生活随笔為你收集整理的输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输入一个链表,反转链表后,输出新链表的表
- 下一篇: 定义栈的数据结构,请在该类型中实现一个能