回顾@@@@
思路一:
统计出所有的0元素,将其删除,list末尾补全0的个数。
# ver 1
# n = nums.count(0)
# print(n)
# for i in range(n):
# nums.remove(0)
# nums.extend([0]*n)
# print(nums)
# ver 2
for i in range(len(nums)):
if nums[i]==0:
del nums[i]
nums.append(0)
return nums
但这种方法,leetcode报错。(为什么gg?)
因为:我用了return,题目要求不要返回任何东西,只要修改原数组。
思路二:i位置不是0元素,将其交换。j永远停留在0的位置。
accept:
# 思路三: 移动非零元素(操作次数就是非零元素的个数)
j = 0 # 记录非零元素应该换到第几个位置
for i in range(len(nums)):
if nums[i] != 0:
nums[j], nums[i] = nums[i], nums[j]
j += 1
然后知道了,python交换数组位置只要
不用引入一个新的变量tmp。
j指向当前位置后面的第一个0,i指向当前位置后面的第一个非0元素,遍历非0元素,而不是遍历0元素。