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丶的題解