激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - Java順時(shí)針打印矩陣

Java順時(shí)針打印矩陣

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

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

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

題目:

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

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

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

思路:

Java順時(shí)針打印矩陣

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

對(duì)于一個(gè)5*5的矩陣,最后一圈只有一個(gè)數(shù)字,對(duì)應(yīng)的坐標(biāo)為(2, 2)。5 > 2 * 2;

對(duì)于一個(gè)6*6的矩陣,最后一圈有4個(gè)數(shù)字,其左上角的坐標(biāo)仍是(2, 2)。6 > 2 *2;

故循環(huán)繼續(xù)的條件為columns > startx * 2并且rows > starty * 2。

打印一圈的實(shí)現(xiàn)可以分為4步:第一步從左到右打印一行,第二步從上到下打印一列,第三步從右到左打印一行,第四步從下到上打印一列(每一步根據(jù)起始坐標(biāo)和終止坐標(biāo)用一個(gè)循環(huán)就能打印出一行或者一列)。

Java順時(shí)針打印矩陣

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

接下來我們分析打印時(shí)每一步的前提條件。第一步總是需要的,因?yàn)榇蛴∫蝗χ辽儆幸徊健H绻挥幸恍校敲淳筒挥玫诙搅恕<吹诙降那疤釛l件是終止行號(hào)大于起始行號(hào)。打印第三步的前提條件是圈內(nèi)至少有兩行兩列。即除了要求終止行號(hào)大于起始行號(hào)外,還需要終止列號(hào)大于起始列號(hào)。同理打印第四步的前提條件是至少有三行兩列,即要求終止行號(hào)比起始行號(hào)至少大2,同時(shí)終止列號(hào)大于起始列號(hào)。

代碼實(shí)現(xiàn):

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

小結(jié):

在二維數(shù)組中遍歷的一種方式,考查我們對(duì)規(guī)律的總結(jié)

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产自在自线午夜精品视频在 | 国产精品看片 | 天天夜夜草 | 亚洲午夜电影 | 久久久一二三 | 国产精品久久久久久久久久尿 | 国产一区精品视频 | 国产精品久久久久久久久久久天堂 | av大全在线免费观看 | 亚洲精品欧美在线 | 一级黄色影院 | 国产精品久久久久久久久久大牛 | 手机黄色小视频 | 日本一区二区三区精品 | av电影网站在线 | 国产成人在线免费观看视频 | 黄色免费不卡视频 | 91av在线免费播放 | 国产精品久久久av | 久久久久久麻豆 | 国产精品伦视频看免费三 | 欧美一级高潮 | 美女久久久久久久久 | 亚洲小视频在线观看,com | 久久九九热re6这里有精品 | 叶子楣成人爽a毛片免费啪啪 | 久久久国产精品免费观看 | 鲁丝一区二区三区不属 | 久久99国产精品免费网站 | 国产91一区二区三区 | 日本黄肉网站在线观看 | 久久毛片免费 | 久久久久亚洲a | 国产中出视频 | 午夜生活理论片 | 欧日韩在线 | 久久精品1区2区 | 中文字幕在线观看视频www | 国产精品99久久免费观看 | 日韩av在线网址 | 日韩激情 |