成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Leetcode 498:對(duì)角線遍歷Diagonal Traverse(python3、java)

shinezejian / 2474人閱讀

摘要:對(duì)角線遍歷給定一個(gè)含有個(gè)元素的矩陣行,列,請(qǐng)以對(duì)角線遍歷的順序返回這個(gè)矩陣中的所有元素,對(duì)角線遍歷如下圖所示。此時(shí)且均超出范圍,,應(yīng)當(dāng)優(yōu)先判斷是否超出范圍,執(zhí)行,避免因?yàn)樵俅吻袚Q一次索引改變方式。避免出現(xiàn)同時(shí)小于時(shí)布爾值轉(zhuǎn)換兩次的錯(cuò)誤。

對(duì)角線遍歷

給定一個(gè)含有 M x N 個(gè)元素的矩陣(M 行,N 列),請(qǐng)以對(duì)角線遍歷的順序返回這個(gè)矩陣中的所有元素,對(duì)角線遍歷如下圖所示。
Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal order as shown in the below image.
示例:

輸入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
輸出:  [1,2,4,7,5,3,6,8,9]

解釋:

說明:

給定矩陣中的元素總數(shù)不會(huì)超過 100000 。

思路

? 實(shí)例輸入的二維數(shù)組范圍均是0~2

? 先觀察一下遍歷規(guī)律:(0,0)->(0,1)->(1,0)->(2,0)->(1,1)->(0,2)->(1,2)->(2,1)->(2,2)

? 數(shù)組索引(m,n),兩種改變方式1、(m-1,n+1) 2、(m+1,n-1)

? 數(shù)組從(0,0)開始,先是(m-1,n+1) ,(0,0)->(-1,1)此時(shí)m=-1,超出范圍,m賦值0。然后切換索引改變方式(m+1,n-1),執(zhí)行兩次(0,1)->(1,0)->(2,-1),n賦值0得到(2,0),再次切換為索引改變方式(m-1,n+1)直到下次超出范圍(2,0)->(1,1)->(0,2)->(-1,3)。此時(shí)m<0且n>2均超出范圍,(m+2,n-1),應(yīng)當(dāng)優(yōu)先判斷n是否超出范圍,執(zhí)行(m+2,n-1)->(1,2),避免因?yàn)閙<0再次切換一次索引改變方式。然后正常切換后:(1,2)->(2,1)->(3,0),因?yàn)閙>2,切換方式并(m-1,n+2)

java:

class Solution {
    public int[] findDiagonalOrder(int[][] matrix) {
        if (matrix.length==0||matrix[0].length==0)return new int[0];
        int col=matrix.length,row=matrix[0].length;
        int nums=col*row,m=0,n=0;
        int res[]=new int[nums];
        boolean flag=true;

        for(int i=0;i=col){
                m-=1; n+=2; flag=true;
            }else if(n>=row){
                n-=1; m+=2; flag=false;
            }
            if(m<0){
                m=0; flag=false;
            }else if(n<0){
                n=0; flag=true;
            }
        }
        return res;
    }
}
注意點(diǎn):

? if (matrix.length==0||matrix[0].length==0)return new int[0];首先判斷是否為空數(shù)組,另外 matrix.length==0||matrix[0].length==0 判斷條件順序不能顛倒,因?yàn)槿绻?matrix.length==0 后面的 matrix[0].length==0 不會(huì)再判斷,即返回空數(shù)組;但是matrix[0].length==0 在前時(shí),如果輸入數(shù)組為空,matrix[0] 會(huì)報(bào)錯(cuò)因?yàn)閙atrix并沒有0號(hào)索引。

? for循環(huán)里應(yīng)當(dāng)先判斷m、n是否大于或等于各自的最大長(zhǎng)度,然后執(zhí)行(m-1,n+2)、(m+2,n-1)。避免出現(xiàn)m、n同時(shí)小于0時(shí)flag布爾值轉(zhuǎn)換兩次的錯(cuò)誤。

python:
class Solution:
    def findDiagonalOrder(self, matrix: List[List[int]]) -> List[int]:
        if(len(matrix)==0 or len(matrix[0])==0):
            return []
        col=len(matrix)
        row=len(matrix[0])
        nums=col*row
        m=n=0
        flag=True
        res=[]
        for i in range(nums):
            res.append(matrix[m][n])
            if flag:
                m-=1
                n+=1
            else:
                m+=1
                n-=1
            if m>=col:
                m-=1
                n+=2
                flag=True
            elif n>=row:
                m+=2
                n-=1
                flag=False
            if m<0:
                m=0
                flag=False
            elif n<0:
                n=0
                flag=True
        return res

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74810.html

相關(guān)文章

  • Leetcode 498對(duì)角線遍歷Diagonal Traversepython3java

    摘要:對(duì)角線遍歷給定一個(gè)含有個(gè)元素的矩陣行,列,請(qǐng)以對(duì)角線遍歷的順序返回這個(gè)矩陣中的所有元素,對(duì)角線遍歷如下圖所示。此時(shí)且均超出范圍,,應(yīng)當(dāng)優(yōu)先判斷是否超出范圍,執(zhí)行,避免因?yàn)樵俅吻袚Q一次索引改變方式。避免出現(xiàn)同時(shí)小于時(shí)布爾值轉(zhuǎn)換兩次的錯(cuò)誤。 對(duì)角線遍歷 給定一個(gè)含有 M x N 個(gè)元素的矩陣(M 行,N 列),請(qǐng)以對(duì)角線遍歷的順序返回這個(gè)矩陣中的所有元素,對(duì)角線遍歷如下圖所示。Given ...

    olle 評(píng)論0 收藏0
  • leetcode498. Diagonal Traverse

    摘要:題目要求思路和代碼其實(shí)這道題目不難,只要捋清楚一些邊界的場(chǎng)景即可。自上而下遍歷數(shù)組時(shí),一定是自右往左移動(dòng)的,因此下標(biāo)移動(dòng)的方向?yàn)?。自上而下有兩種邊界場(chǎng)景,一個(gè)是到達(dá)了左邊界,此時(shí)的移動(dòng)方向變?yōu)榧瓷蠄D中的。 題目要求 Given a matrix of M x N elements (M rows, N columns), return all elements of the matri...

    fanux 評(píng)論0 收藏0
  • Diagonal traverse

    Diagonal traverse 題目鏈接:https://leetcode.com/contest/... 就是找index的規(guī)律。。 public class Solution { public int[] findDiagonalOrder(int[][] matrix) { if(matrix == null || matrix.length == 0 || ma...

    DevTalking 評(píng)論0 收藏0
  • leetcode 766 Toeplitz Matrix

    摘要:題目詳情如果一個(gè)矩陣的每一條斜對(duì)角線左上到右下上的元素都相等,則我們稱它為托普利茲矩陣?,F(xiàn)在輸入一個(gè)大小的矩陣,如果它是一個(gè)托普利茲矩陣,則返回,如果不是,返回。 題目詳情 matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element.Now given an M x N ...

    harriszh 評(píng)論0 收藏0
  • [Algo] Print Matrix Diagonal 對(duì)角打印

    摘要:雙重循環(huán)復(fù)雜度時(shí)間空間思路總共需要打印的層數(shù),是長(zhǎng)度加寬度減去一。關(guān)鍵在于內(nèi)層的,而。代碼計(jì)算打印的層數(shù)超過邊界的點(diǎn)直接跳過 Print Matrix Diagonal Print the matrix in diagonal way. For example: 1 2 3 4 5 6 7 8 Print: 1 2 5 6 3 4 7 8 雙重循環(huán) 復(fù)雜度 時(shí)間 O(NM) 空間...

    RancherLabs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<