使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
left, n = 0, len(nums)
for i in range(n):
if nums[i]:
nums[i], nums[left] = nums[left], nums[i]
left += 1
return nums
方法二:pop,append
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
# 用 for 的时候一般不变动元素内容,以下方法有错,改用 while 循环。
# for i in range(len(nums)):
# if nums[i] == 0:
# nums.pop(i)
# nums.append(0)
# return nums
# 如:[0,0,1] 输出 [0,1,0]
i, j = 0, len(nums)-1
while i < j:
if nums[i] == 0:
nums.pop(i)
nums.append(0)
j -= 1
else:
i += 1
return nums



