Java螺旋矩陣處理方法詳解
題目描述:
給定一 m*n 的矩陣,請按照逆時針螺旋順序,返回矩陣中所有元素。
示例:

思路:
這是一道典型的模擬問題:
我們可以分析一下,遍歷前進軌跡: 向右 - > 向下 -> 向左 -> 向上 -> 向右 …
于是,我們可以在循環(huán)中模擬這樣的前進軌跡,記錄 右,下,上左,四個邊界,每次拐彎時更新邊界值,再進行下一次拐彎,循環(huán)往復,直至結束。結束條件為 左邊界加一大于右邊界,或者上邊界加一大于下邊界。
圖解:

代碼:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<Integer>();
// 思路: 注意上下左右邊界 —— 走格子法(一直走,一直走,直到走完了,出去)
int left = 0;
int right = matrix[0].length - 1;
int up = 0;
int down = matrix.length - 1;
if(right==-1 || down==-1){
return list;
}
while(true){
// 向右走
for(int i=left; i<=right; i++){
list.add(matrix[up][i]);
}
// 判斷是否結束
if(up+1 > down){
break;
} else{
up++; // 更新上邊界
}
// 向下走
for(int i=up; i<=down; i++){
list.add(matrix[i][right]);
}
// 判斷是否結束
if(right - 1 < left){
break;
} else{
right--; // 更新右邊界
}
// 向左走
for(int i=right; i>=left; i--){
list.add(matrix[down][i]);
}
// 判斷是否結束
if(down-1 < up){
break;
} else{
down--; // 更新下邊界
}
// 向上走
for(int i=down; i>=up; i--){
list.add(matrix[i][left]);
}
// 判斷是否結束
if(left + 1 > right ){
break;
} else{
left++; // 更新左邊界
}
}
return list;
}
}變式一: 題目描述:
給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。
示例:

代碼:
class Solution {
public int[][] generateMatrix(int n) {
int[][] ans = new int[n][n];
int left = 0;
int right = n - 1;
int up = 0;
int down = n - 1;
int start = 1;
while(true){
// 向右
for(int i=left; i<=right; i++){
ans[up][i] = start;
start++;
}
if(++ up > down){
break;
}
// 向下
for(int i=up; i<=down; i++){
ans[i][right] = start;
start++;
}
if(-- right < left){
break;
}
// 向左
for(int i=right; i>=left; i--){
ans[down][i] = start;
start++;
}
if(-- down < up){
break;
}
// 向上
for(int i=down; i>=up; i--){
ans[i][left] = start;
start++;
}
if(++ left > right){
break;
}
}
return ans;
}
}到此這篇關于Java螺旋矩陣處理方法詳解的文章就介紹到這了,更多相關Java螺旋矩陣內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解
這篇文章主要介紹了java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot快速設置攔截器并實現(xiàn)權限驗證的方法
本篇文章主要介紹了SpringBoot快速設置攔截器并實現(xiàn)權限驗證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01

