一、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,−1−i)
因为-1指的是数组末位,-2相当于数组倒数第二位。
但我感觉这样的思路在编程的时候容易出错,最后再稿纸理清过程再进行编程,避免索引出错。
这种解法的思路应该算是原地解法,但时间复杂度仍然是 O ( N 2 ) O(N^2) O(N2)
如果使用暴力解法,时间和空间复杂度都是 O ( N 2 ) O(N^2) O(N2)
代码如下:
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]
官方给的参考代码效率一般