LeetCode之加一-Swift

godiscoder發表於2019-01-15

問題描述

給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。你可以假設除了整數 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複製程式碼

結語

語言是招式,演算法是內功。希望我們勤練內功,早日成就自己的江湖!

來源:https://juejin.im/post/5c3d497ef265da61616ee99f

相關文章