(Python) LeetCode 27:移除元素

题目:

思路:

每当有一个数相等,那么就把后面所有的数往前移动一个位置,然后把列表最后一个删掉。但这里有容易出错的,在第二个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的解题方法欢迎大家一起讨论~

猜你喜欢

转载自blog.csdn.net/weixin_44260459/article/details/121354551