国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java順時針打印矩陣

Java順時針打印矩陣

2021-07-18 15:27程序猿li Java教程

這篇文章主要為大家詳細介紹了Java順時針打印矩陣,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java順時針打印矩陣的具體代碼,供大家參考,具體內容如下

題目:

輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數字。例如:如果輸入如下矩陣:

1     2       3     4
5     6       7     8
9    10    11   12
13 14    15   16

則依次打印出數字1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10。

思路:

Java順時針打印矩陣

首先拿到這個題,讀完題我們腦子里會呈現出這樣的一個畫面。從外圈到內圈順序的依次打印,我們就可以把矩陣想象成若干個圈,如上圖所示,我們可以用一個循環來打印矩陣,每一次打印矩陣中的一個圈。那么循環結束的條件是什么?假設這個矩陣的行數是rows,列數是columns。打印第一圈的左上角的坐標是(0, 0),第二圈的左上角的坐標是(1, 1),依次類推。我們注意到左上角的坐標中行標和列標總是相同的,于是可以在矩陣中選取左上角為(start,start)的一圈作為我們的分析的目標。

對于一個5*5的矩陣,最后一圈只有一個數字,對應的坐標為(2, 2)。5 > 2 * 2;

對于一個6*6的矩陣,最后一圈有4個數字,其左上角的坐標仍是(2, 2)。6 > 2 *2;

故循環繼續的條件為columns > startx * 2并且rows > starty * 2。

打印一圈的實現可以分為4步:第一步從左到右打印一行,第二步從上到下打印一列,第三步從右到左打印一行,第四步從下到上打印一列(每一步根據起始坐標和終止坐標用一個循環就能打印出一行或者一列)。

Java順時針打印矩陣

注意:最后一圈可能退化成只有一行、只有一列,甚至只有一個數字,因此打印這樣的一圈就不再需要四步,可能只需要三步、兩步、一步。

接下來我們分析打印時每一步的前提條件。第一步總是需要的,因為打印一圈至少有一步。如果只有一行,那么就不用第二步了。即第二步的前提條件是終止行號大于起始行號。打印第三步的前提條件是圈內至少有兩行兩列。即除了要求終止行號大于起始行號外,還需要終止列號大于起始列號。同理打印第四步的前提條件是至少有三行兩列,即要求終止行號比起始行號至少大2,同時終止列號大于起始列號。

代碼實現:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public arraylist<integer> printmatrixclockwisely(int [][]nums){
 arraylist<integer> list = new arraylist<integer>();
 int rows = nums.length;
 int cols = nums[0].length;
 if(nums == null || cols <= 0 || rows <= 0){
 return null;
 }
 int start = 0;
 while(cols > start*2 && rows > start*2){
 printmatrixincircle(list, nums, cols, rows, start);
 ++start;
 }
 return list;
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private void printmatrixincircle(arraylist<integer> list, int[][] nums,
 int cols, int rows, int start) {
 int endx = cols - 1 - start;
 int endy = rows - 1 - start;
 
 //從左到右打印一行
 for (int i = start; i <= endx; ++i) {
 int number = nums[start][i];
 list.add(number);
 }
 //從上到下打印一列
 if(start < endy){
 for (int i = start + 1; i <= endy; ++i) {
  int number = nums[i][endx];
  list.add(number);
 }
 }
 //從右向左打印一行
 if(start < endx && start < endy){
 for (int i = endx-1; i >= start; --i) {
  int number = nums[endy][i];
  list.add(number);
 }
 }
 //從下向上打印一列
 if(start < endx && start < endy - 1){
 for (int i = endy-1; i >= start + 1; --i) {
  int number = nums[i][start];
  list.add(number);
 }
 }
}

小結:

在二維數組中遍歷的一種方式,考查我們對規律的總結

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/u013132035/article/details/80594659

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品久久久久久 | 国产激情久久久久久 | 欧美第8页 | 一级片在线观看 | 93看片淫黄大片一级 | 狠狠操av| 精品国产青草久久久久福利 | h小视频在线 | 国产中文在线 | 亚洲综合社区 | 91嫩草国产露脸精品国产 | 日本手机在线视频 | 亚洲成a人v欧美综合天堂麻豆 | 国产精品亚洲视频 | 北条麻妃一区二区三区在线观看 | 国产精品区二区三区日本 | 免费日本视频 | 自拍视频一区 | 精品免费视频 | 国产激情在线观看 | 人妖天堂狠狠ts人妖天堂狠狠 | 依人在线| 欧美在线影院 | 91福利视频免费 | 黄色片免费观看网站 | 久久久天堂国产精品女人 | 亚洲视频在线播放 | 91免费观看视频 | 亚洲精品日韩激情在线电影 | 欧美激情精品久久久久久 | 青青草91在线视频 | 日韩一区在线视频 | 91精品一区| 久久精品伊人 | 成人亚洲视频 | 国内免费自拍视频 | 日韩精品久久 | 精品麻豆剧传媒av国产九九九 | 亚洲一区视频 | 国产精品久久久久一区二区三区 | 中文久久久久 |