LeetCode之加一-Swift

問題描述

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

複製代碼

結語

語言是招式,算法是內功。但願咱們勤練內功,早日成就本身的江湖!數組

相關文章
相關標籤/搜索