【力扣】1089. 複寫零--Python實現
阿新 • • 發佈:2021-02-03
【題目描述】
給你一個長度固定的整數陣列 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