Leetcode 283. Move Zeroes

Question

Solution

考虑到可能多个0排列在一起,所以不能前后调换来做。使用两个指针,第一个指向0,第二个指向0之后的第一个非0元素, 然后替换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i, j = 0, 1
n = len(nums)
while j < n:
if nums[i] != 0:
i += 1
j += 1
elif nums[j] == 0:
j += 1
elif nums[j] != 0:
nums[i], nums[j] = nums[j], nums[i]
i += 1
j += 1
return

更简洁的表示

1
2
3
4
5
6
7
8
9
10
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
zero = 0
for i in range(len(nums)):
if nums[i] != 0:
nums[i], nums[zero] = nums[zero], nums[i]
zero += 1