题目:
思路:
每当有一个数相等,那么就把后面所有的数往前移动一个位置,然后把列表最后一个删掉。但这里有容易出错的,在第二个while里面,如果没有 i-1 这一步,那么会导致当有一个元素相等,处理之后会跳过一个元素(因为i+1,但其实后面的元素已经往前移动一格了,所以此时还是应该比较位置 i 处,所以当有相同的时候,在删除完最后一个元素,要把 i-1,保持在当前下标出不变)
代码:
class Solution:
def removeElement(self, nums, val: int):
i = 0
while i < len(nums):
if nums[i] == val:
j = i
while j < len(nums) - 1:
nums[j] = nums[j + 1] # 将后面的数往前移动一位
j += 1
del nums[j] # 删除最后一个元素(相当于是一个空位)
i-=1 # 保证i保持在原位,因为后面的数都往前移动了一个位置
i += 1
print(len(nums))
print(nums)
return len(nums), nums
if __name__ == '__main__':
solution = Solution()
solution.removeElement([0,1,2,2,3,0,4,2],2)
结果:
关于LeetCode的解题方法欢迎大家一起讨论~