iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0
自我挑戰組

LeetCode演算法刷題 使用Go系列 第 13

Day13-[LeetCode演算法刷題 使用Go] -Plus One

  • 分享至 

  • xImage
  •  

題目連結: Plus One

題目說明為給定一非空的數字陣列,此陣列用來表示一個非負整數,要我們 +1 後返回。除了 0 以外,此陣列的第一項均不為 0。
題目另外有補充說明: 陣列長度介於 [0,100],每個位數值介於 [0,9]。
例子 1: digits = [4,3,2,1], output=[4,3,2,2]。

思路 1 : 仿造對整數做加法

我們可以從最後一位數開始,如果 < 9,則可以直接 +1 後返回。如果剛好是 9 ,要 +1 後此位數為 0,往前進位。而往前進位的程序也是繼續檢查該位數是否 < 9 ,因此可寫成一迴圈檢查。而要注意的是若原陣列內的各個位數均為 9, 例如 digits = [9,9],則加完後的值為 [1,0,0],位數需要+1。

  • 複雜度評估
    當陣列長度為 N 時,我們至多需要遍歷整個陣列一次,時間複雜度為 O(N)。
    此方法只用了常數個變數,與 N 大小無關,空間複雜度為 O(1)。

參考程式碼

func plusOne(digits []int) []int {
  
    for i:=len(digits)-1;i>=0;i--{
        if digits[i]<9{
            digits[i]++
            return digits          
        }else{
             digits[i]=0          
        }      
    }
    
    digits=append(digits,0)
    digits[0]=1 
    
    return digits
}

小結

此題最高輸入位數可為 100 位數,相當於對大數進行運算,而當要加的數字不為 1 時,有更一般的寫法,網路上的分享解法在此。
我將分享解法稍做修改,增加迴圈停止條件以及直接返回 digits 後 做為解法 2,加上簡單的測試,上傳 程式碼到此。


上一篇
Day12-[LeetCode演算法刷題 使用Go] -Valid Palindrome
下一篇
Day14-[LeetCode演算法刷題 使用Go] -Isomorphic Strings
系列文
LeetCode演算法刷題 使用Go30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言