1. 程式人生 > 其它 >【力扣】1089. 複寫零--Python實現

【力扣】1089. 複寫零--Python實現

技術標籤:力扣leetcode資料結構演算法

【題目描述】
給你一個長度固定的整數陣列 arr,請你將該陣列中出現的每個零都複寫一遍,並將其餘的元素向右平移。

注意:請不要在超過該陣列長度的位置寫入元素。

要求:請對輸入的陣列 就地 進行上述修改,不要從函式返回任何東西。

示例 1:
輸入:[1,0,2,3,0,4,5,0]
輸出:null
解釋:呼叫函式後,輸入的陣列將被修改為:[1,0,0,2,3,0,0,4]

示例 2:
輸入:[1,2,3]
輸出:null
解釋:呼叫函式後,輸入的陣列將被修改為:[1,2,3]

提示:
1 <= arr.length <= 10000
0 <= arr[i] <= 9

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/duplicate-zeros

【解題思路】
先遍歷一遍陣列,記錄一個res指標,迴圈條件是res<length: 當遇到0的時候,res+2,遇到非0的時候,res+1。
然後從後往前填數字,如果res<length,證明不可能是末尾元素是0,且一個0在length內,一個0在length外的情況——此時複製一遍,如果當前是0,再複製一遍;如果這個條件不成立,則複製一遍末尾的元素即可。用Python實現的程式碼如下:

class Solution(object):
    def duplicateZeros(self, arr):
        """
        :type arr: List[int]
        :rtype: None Do not return anything, modify arr in-place instead.
        """
        length = len(arr)
        i,res = 0,0
        while res<length:
            if arr[i] == 0:
                res += 2
            else:
                res += 1
            i += 1
        
        i-=1
        res-=1
        
        while res>0:
            if res<length:
                arr[res]=arr[i]
            if arr[i]==0:
                res-=1
                arr[res]=arr[i]
            i-=1
            res-=1