Plus One

Description

Plus One

给定一个用数组表示的十进制数,将数字加一。

Example 1:

Input: [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.

Example 2:

Input: [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.

Solution

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
func plusOne(digits []int) []int {
    for i := len(digits) - 1; i >= 0; i-- {
        if digits[i] != 9 {
            digits[i]++
            return digits
        }
        digits[i] = 0
    }

    return append([]int{1}, digits...)
}

Add Binary

Discription

Add Binary

将两个二进制字符串相加

Example 1:

Input: a = "11", b = "1"
Output: "100"

Example 2:

Input: a = "1010", b = "1011"
Output: "10101"

Solution

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
func addBinary(a string, b string) string {
    aLen := len(a)
    bLen := len(b)

    limit := aLen
    if bLen > limit {
        limit = bLen
    }

    s := make([]byte, limit+1)

    var carry byte
    var idx int
    for i := 1; i <= limit; i++ {
        idx = aLen - i
        if idx >= 0 {
            carry += a[idx] - '0'
        }

        idx = bLen - i
        if idx >= 0 {
            carry += b[idx] - '0'
        }

        // 因为 s 长度为 limit+1,所以需要 limit-i+1
        s[limit-i+1] = carry&0x01 + '0'
        carry >>= 1
    }

    // 起初 s 申请的长度为 limit:make([]byte, limit)
    // 然后判断 carry 为 1 的时候 s = append([]byte{'1'}, s...)
    // 这样导致第二次申请内存,耗时增加
    // 所以直接申请 limit + 1 长度,返回时少返回一位
    if carry == 0 {
        return string(s[1:])
    }

    s[0] = '1'

    return string(s)
}