每当有一个数相等,那么就把后面所有的数往前移动一个位置,然后把列表最后一个删掉。但这里有容易出错的,在第二个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的解题方法欢迎大家一起讨论~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)