LectCode283: Move Zeroes
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
第一种方法思路: 当列表中的元素是0时, 将0添加在元素末尾,然后删除对应的0
def moveZeroes(nums: List[int]) -> None:
i = 0
count = 0
while i < len(nums):
count += 1
if count <= len(nums): # 需要判断count,否则当列表中的元素全部是0的时候,会死循环
if nums[i] == 0:
nums.append(nums[i])
nums.remove(0)
else:
i += 1
else:
break
return nums
第二种:新建二个空列表, 将列表中非零元素和0分别添加到不同的列表中,之后再合并
def moveZeroes(nums: List[int]) -> None:
if len(nums) == 1:
return nums
zero_list = []
ans = []
for i in range(len(nums)):
if nums[i] == 0:
zero_list.append(nums[i])
else:
ans.append(nums[i])
ans.extend(zero_list)
nums[:] = ans[:]
return nums
第三种:用双指针的方法来写
def moveZeroes(nums: List[int]) -> None:
i = 0
if len(nums) == 1:
return nums
for j in range(len(nums)):
if nums[j] != 0:
if nums[i] == 0:
nums[i] = nums[j]
nums[j] = 0
i += 1

浙公网安备 33010602011771号