問題描述
給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例
示例 1:輸入: [1,2,3]輸出: [1,2,4]解釋: 輸入陣列表示數字 123。示例 2:輸入: [4,3,2,1]輸出: [4,3,2,2]解釋: 輸入陣列表示數字 4321。複製程式碼
答案
每個元素的和若為10,則向前進一位,若陣列中index=0的元素為0,則說明最高位進位1,在陣列頭部insert一個元素1(例如:陣列[9,9,9],則進位成[1,0,0,0])
程式碼如下:
func plusOne(_ digits: [Int]) ->
[Int] {
var result = digits var carry = 1 for idx in result.indices {
let newIdx = digits.count - 1 - idx let sum = digits[newIdx] + carry if sum == 10 {
carry = 1 result[newIdx] = 0
} else {
carry = 0 result[newIdx] = sum
}
} if result.first == 0 {
result.insert(1, at: 0)
} return result
}複製程式碼
nums = [2,3,4,3,2]
的執行結果如下:
第一次迴圈:0 ^ 2 = 2二進位制:0 + 10 = 10第二次迴圈:2 ^ 3 = 1二進位制:10 + 11 = 1第三次迴圈:1 ^ 4 = 5二進位制:1 + 100 = 101第四次迴圈:5 ^ 3 = 6二進位制:101 + 11 = 110第五次迴圈:6 ^ 2 = 4二進位制:110 + 10 = 100複製程式碼
結語
語言是招式,演算法是內功。希望我們勤練內功,早日成就自己的江湖!