欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java螺旋矩陣處理方法詳解

 更新時間:2022年09月30日 14:56:33   作者:劉婉晴  
螺旋矩陣是指一個呈螺旋狀的矩陣,它的數(shù)字由第一行開始到右邊不斷變大,向下變大,向左變大,向上變大,如此循環(huán)。利用java實現(xiàn)的螺旋矩陣,當輸入N之后,會自動打印出螺旋矩陣

題目描述:

給定一 m*n 的矩陣,請按照逆時針螺旋順序,返回矩陣中所有元素。

示例:

思路:

這是一道典型的模擬問題:

我們可以分析一下,遍歷前進軌跡: 向右 - > 向下 -> 向左 -> 向上 -> 向右 …

于是,我們可以在循環(huán)中模擬這樣的前進軌跡,記錄 右,下,上左,四個邊界,每次拐彎時更新邊界值,再進行下一次拐彎,循環(huán)往復,直至結(jié)束。結(jié)束條件為 左邊界加一大于右邊界,或者上邊界加一大于下邊界。

圖解:

代碼:

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]);
            }
            // 判斷是否結(jié)束
            if(up+1 > down){
                break;
            } else{
                up++; // 更新上邊界
            }
            // 向下走
            for(int i=up; i<=down; i++){
                list.add(matrix[i][right]);
            }
            // 判斷是否結(jié)束
            if(right - 1 < left){
                break;
            } else{
                right--; // 更新右邊界
            }
            // 向左走
            for(int i=right; i>=left; i--){
                list.add(matrix[down][i]);
            }
            // 判斷是否結(jié)束
            if(down-1 < up){
                break;
            } else{
                down--; // 更新下邊界
            }
            // 向上走
            for(int i=down; i>=up; i--){
                list.add(matrix[i][left]);
            }
            // 判斷是否結(jié)束
            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;
    }  
}

到此這篇關(guān)于Java螺旋矩陣處理方法詳解的文章就介紹到這了,更多相關(guān)Java螺旋矩陣內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring緩存代碼詳解

    spring緩存代碼詳解

    這篇文章主要介紹了spring緩存代碼詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 10種java數(shù)組合并的常用方法總結(jié)

    10種java數(shù)組合并的常用方法總結(jié)

    在Java中,合并(或連接)數(shù)組是常見的任務,這篇文章主要為大家整理了10個java中常用的數(shù)組合并方法,文中的示例代碼簡潔易懂,需要的小伙伴可以參考下
    2023-12-12
  • java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解

    java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解

    這篇文章主要介紹了java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JavaWeb簡單用戶登錄注冊實例代碼(有驗證碼)

    JavaWeb簡單用戶登錄注冊實例代碼(有驗證碼)

    這篇文章主要介紹了JavaWeb簡單用戶登錄注冊實例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • java 中的volatile關(guān)鍵字

    java 中的volatile關(guān)鍵字

    這篇文章主要介紹了java 中的volatile關(guān)鍵字,volatile在多處理器開發(fā)中保證共享變量的“可見性”??梢娦缘囊馑际钱斠粋€線程修改一個共享變量時,另一個一個線程立馬可以讀到這個修改的值。下面我們來看看文章的具體介紹內(nèi)容吧

    2021-12-12
  • SpringBoot快速設(shè)置攔截器并實現(xiàn)權(quán)限驗證的方法

    SpringBoot快速設(shè)置攔截器并實現(xiàn)權(quán)限驗證的方法

    本篇文章主要介紹了SpringBoot快速設(shè)置攔截器并實現(xiàn)權(quán)限驗證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java 基礎(chǔ)語法

    Java 基礎(chǔ)語法

    這篇文章主要介紹了Java 基礎(chǔ)語法,Java 是一門面向?qū)ο蟮慕忉屝途幊陶Z言,面向?qū)ο?意味著我們應該把一個 Java 程序看作一系列對象的集合,我們的工作就是構(gòu)建這些對象,并通過調(diào)用彼此的方法來讓各種對象協(xié)同工作,解決實際的問題,下面文章內(nèi)容需要的朋友可以參考下一
    2021-11-11
  • java?ArrayList的深拷貝與淺拷貝問題

    java?ArrayList的深拷貝與淺拷貝問題

    這篇文章主要介紹了java?ArrayList的深拷貝與淺拷貝問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Quarkus中filter過濾器跨域cors問題解決方案

    Quarkus中filter過濾器跨域cors問題解決方案

    這篇文章主要為大家介紹了Quarkus中filter過濾器跨域cors問題的解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • Java transient關(guān)鍵字原理解析

    Java transient關(guān)鍵字原理解析

    這篇文章主要介紹了Java transient關(guān)鍵字原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01

最新評論