LeetCode in Python-283. Move Zeros 移動零

題目描述

在這裏插入圖片描述

注意點

必須在原數組上操作,不能拷貝額外的數組
PS:修改nums即可,不必有新的返回值

解法1、利用位置標記替換元素後補0

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        pos = 0
        for i in range(len(nums)):
            if nums[i]:
                nums[pos] = nums[i]
                pos += 1
        for i in range(pos, len(nums)):
            nums[i] = 0

在for循環的時候雖然會修改nums的內容,但是長度沒變,所以不影響循環判斷

解法2、藉助filter和enumerate

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = 0
        for i, n in enumerate(filter(lambda x: x, nums)):
            nums[i] = n
        for i in range(i + 1, len(nums)):
            nums[i] = 0

1、enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合爲一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。

enumerate(sequence, [start=0])
sequence – 一個序列、迭代器或其他支持迭代對象。
start – 下標起始位置。

2、filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個爲函數,第二個爲序列,序列的每個元素作爲參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

解法3、sort

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        nums.sort(key=bool, reverse=True)

list.sort( key=None, reverse=False)

key – 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
reverse – 排序規則,reverse = True 降序, reverse = False 升序(默認)。

出處

1、https://www.bilibili.com/video/av50408908
2、3、對應題目下Knife丶的題解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章