2022跟着leedcode学数据结构--第5天

99 阅读1分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战

image.png

[杨辉三角 II]

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

image.png

示例 1:

输入: rowIndex = 3 输出: [1,3,3,1] 示例 2:

输入: rowIndex = 0 输出: [1] 示例 3:

输入: rowIndex = 1 输出: [1,1]  

提示:

0 <= rowIndex <= 33  

进阶:

你可以优化你的算法到 O(rowIndex) 空间复杂度吗?

解题思路: 1.老规矩,先判断特殊情况 当rowIndex ==0 返回 [1] 2.使用for row in range(1,rowindex) 进行遍历,一直遍历到最新的行,就是我们想要的数据了

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        if rowIndex == 0 :
            return [1]
        res = [1]
        for row in range(1, rowIndex+1):
            tmp = [1]
            for i in range(1, row):
                tmp.append(res[i] + res[i-1])
            tmp.append(1)
            res = tmp
        return res

执行结果:

image.png

[旋转图像]

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

 

示例 1:

image.png

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[7,4,1],[8,5,2],[9,6,3]] 示例 2:

image.png

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]] 输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]  

提示:

n == matrix.length == matrix[i].length 1 <= n <= 20 -1000 <= matrix[i][j] <= 1000

解题思路: 1.同样先判断一下特殊情况,只有一个数据,直接返回即可 2.根据每一层进行遍历赋值,设置设置tmp作为一个存储值,将旋转值进行逐个替换。

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        if len(matrix) == 0 :
            return matrix
        nums = len(matrix)
        for i in range(nums // 2):             
            for j in range(i, nums - i - 1):   
                tmp = matrix[nums - 1 - j][i]
                matrix[nums - 1 - j][i] = matrix[nums - 1 - i][nums - 1 - j]
                matrix[nums - 1 - i][nums - 1 - j] = matrix[j][nums - 1 - i]
                matrix[j][nums - 1 - i] = matrix[i][j]
                matrix[i][j] = tmp

执行结果:

image.png