Python编程题23--移动零

2021-10-30  本文已影响0人  wintests

题目

给定一个非空列表 nums,请将 nums 中所有 0 移动到列表的末尾,同时保持非零元素的相对顺序。

注意:只允许在原列表nums上操作,而不能返回一个新创建的列表。

例如:

给定一个列表:[0, 1, 0, 3, 12],返回结果:[1, 3, 12, 0, 0]

实现思路1

代码实现

def moveZeroes(nums):
    for i in range(len(nums)):
        flag = True
        for j in range(len(nums) - i - 1):
            if nums[j] == 0 and nums[j + 1] != 0:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
                flag = False
        if flag:
            break
    return nums

实现思路2

代码实现

def moveZeroes(nums):
    index = 0
    for num in nums:
        if num != 0:
            nums[index] = num
            index += 1
    for i in range(index, len(nums)):
        nums[i] = 0
    return nums

实现思路3

使用上面方法,可以发现有以下特点:

  • left左侧的所有元素,都将是非 0 元素
  • 从left右侧到right左侧的所有元素,都将是 0 元素

每次交换都是 left 当前对应的 0 元素与 right 对应的非 0 元素进行交换,所以最终得到的 nums 中,非零元素的相对顺序是保持不变的。

代码实现

def moveZeroes(nums):
    left = right = 0
    while right < len(nums):
        if nums[right] != 0:
            if left != right:
                nums[left], nums[right] = nums[right], nums[left]
            left += 1
        right += 1
    return nums

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

上一篇 下一篇

猜你喜欢

热点阅读