LeetCode Task 02 数组基础 0066加一 0048旋转图像


一、0066加一

题目链接

题目描述:

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

示例1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

思路:可以直接利用数组最后一项(通过-1)去索引来实现末位加一。但是对于99这种情况,输出应该是[1,0,0],此时处理起来稍微复杂一点。
因此,改用join的思路,先将数组合成一个字符串,再转换成int,加1后再用转换成数组列表的形式。



代码如下:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        digits = list(map(str,digits))
        digit = "".join(digits)
        digit = int(digit)+1
        digits = list(map(int,str(digit)))
        return digits

运行结果如下:

在这里插入图片描述

官方题解采用的是最开始的那种想法,即按照数组去处理,遇到末位是9再另外处理。
参考代码:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        n = len(digits)
        for i in range(n - 1, -1, -1):
            if digits[i] != 9:
                digits[i] += 1
                for j in range(i + 1, n):
                    digits[j] = 0
                return digits

        # digits 中所有的元素均为 9
        return [1] + [0] * n


作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/plus-one/solution/jia-yi-by-leetcode-solution-2hor/
来源:力扣(LeetCode)
在这里插入图片描述

二、0048旋转图像

题目链接
题目描述:

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

在这里插入图片描述

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

思路:
最直接的思路是使用一个temp变量临时存储交换的值,然后遍历矩阵的每个元素,将元素交换到相应的位置,其位置索引可按照如下公式:
( i , j ) = ( j , − 1 − i ) (i,j)=(j,-1-i) i,j=j,1i
因为-1指的是数组末位,-2相当于数组倒数第二位。
但我感觉这样的思路在编程的时候容易出错,最后再稿纸理清过程再进行编程,避免索引出错。
这种解法的思路应该算是原地解法,但时间复杂度仍然是 O ( N 2 ) O(N^2) ON2
如果使用暴力解法,时间和空间复杂度都是 O ( N 2 ) O(N^2) ON2



代码如下:

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)
        for i in range(0,n//2):
            for j in range(0+i,n-i-1):
                x = i
                y = j
                rolate = matrix[x][y]
                for z in range(4):
                    temp = matrix[y][-1-x]
                    matrix[y][-1-x] = rolate
                    rolate = temp
                    temp_y = y
                    y = -1-x
                    x = temp_y

运行结果如下:
在这里插入图片描述


官方题解:
暴力解法:

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        n = len(matrix)
        # Python 这里不能 matrix_new = matrix 或 matrix_new = matrix[:] 因为是引用拷贝
        matrix_new = [[0] * n for _ in range(n)]
        for i in range(n):
            for j in range(n):
                matrix_new[j][n - i - 1] = matrix[i][j]
        # 不能写成 matrix = matrix_new
        matrix[:] = matrix_new

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/rotate-image/solution/xuan-zhuan-tu-xiang-by-leetcode-solution-vu3m/
来源:力扣(LeetCode)
在这里插入图片描述
原地解法:

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        n = len(matrix)
        for i in range(n // 2):
            for j in range((n + 1) // 2):
                matrix[i][j], matrix[n - j - 1][i], matrix[n - i - 1][n - j - 1], matrix[j][n - i - 1] \
                    = matrix[n - j - 1][i], matrix[n - i - 1][n - j - 1], matrix[j][n - i - 1], matrix[i][j]


在这里插入图片描述
官方给的参考代码效率一般

Guess you like

Origin blog.csdn.net/weixin_45662974/article/details/121388362