給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。最高位數字存放在數組的首位, 數組中每一個元素只存儲一個數字。你能夠假設除了整數 0 以外,這個整數不會以零開頭。git
示例 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
複製代碼
語言是招式,算法是內功。但願咱們勤練內功,早日成就本身的江湖!數組