美文网首页
巩固练习螺旋矩阵-54/剑指Offer 29

巩固练习螺旋矩阵-54/剑指Offer 29

作者: 胖胖的熊管家 | 来源:发表于2023-07-03 11:06 被阅读0次

54. 螺旋矩阵

解题思路

出现的问题

JavaScript解法代码

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
    let column = matrix.length
    let row = matrix[0].length
    let left=0, right=row-1, top=0, bottom=column-1;
    let output = []
    while(left <= right && top<=bottom){
        for(let i=left;i<=right;i++){
            output.push(matrix[top][i])
        }
        for(let j=top+1;j<=bottom;j++){
            output.push(matrix[j][right])
        }
        if(left < right && top< bottom){
            for(let i=right-1;i>=left;i--){
                output.push(matrix[bottom][i])
            }
            for(let j=bottom-1;j>top;j--){
                output.push(matrix[j][left])
            }
        }
        left++
        right--
        top++
        bottom--
    }
    return output
};

Python解法代码

class Solution(object):
    def spiralOrder(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[int]
        """
        column = len(matrix)
        row = len(matrix[0])
        left=0
        right=row-1 
        top=0
        bottom=column-1
        output = []
        while(left <= right and top<=bottom):
            for i in range(left,right+1):
                output.append(matrix[top][i])
            
            for j in range(top+1,bottom+1):
                output.append(matrix[j][right])
            
            if(left < right and top< bottom):
                for i in range(right-1,left-1,-1):
                    output.append(matrix[bottom][i])
                
                for j in range(bottom-1,top,-1):
                    output.append(matrix[j][left])
            
            left+=1
            right-=1
            top+=1
            bottom-=1
        
        return output

剑指Offer 29

同样的题。


总结:

螺旋输出主要是思路清楚、边界清楚。通解:

// 定义left,right,top,bottom
while(left <= right && top<=bottom){
    for(let i=left;i<=right;i++){
        // 从左上至右上
    }
    for(let j=top+1;j<=bottom;j++){
        // 从右上至右下
    }
    if(left < right && top< bottom){
        for(let i=right-1;i>=left;i--){
            // 从右下至左下
        }
        for(let j=bottom-1;j>top;j--){
            // 从左下至右上
        }
    }
    left++
    right--
    top++
    bottom--
}

相关文章

网友评论

      本文标题:巩固练习螺旋矩阵-54/剑指Offer 29

      本文链接:https://www.haomeiwen.com/subject/dolqudtx.html