日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字

發布時間:2024/10/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/** 順時針打印* 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;//行數int llen=matrix[0].length;//列數boolean[][] flag=new boolean[hlen][llen];//標志位ArrayList<Integer> val=new ArrayList<Integer>();int i=0,j=0;//i是豎著————行標,j是橫著-——列標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])) {//四個方向至少有一條是通的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; } }

?

?

?

左神算法中的解決思路:

思想:一層一層處理

?

一層完后,有外層的左上點,到內層的左上點,進行下一層的處理

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--;}}} }

?

總結

以上是生活随笔為你收集整理的输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。