Skip to content

Latest commit

 

History

History
134 lines (113 loc) · 2.78 KB

0066._plus_one.md

File metadata and controls

134 lines (113 loc) · 2.78 KB

Navigation

Links:

  1. https://leetcode.com/problems/plus-one/
  2. https://leetcode-cn.com/problems/plus-one/

Tags

  1. 数组

Solution 1 类型转换

列表 -> 字符串 -> 整数 -> +1 -> 字符串 -> 列表

class Solution:
    def plusOne(self, digits):
        digit = int(''.join([str(m) for m in digits]))
        result = [int(x) for x in str(digit + 1)]

        return result

class Solution:
    def plusOne(self, digits):
        digit = int(''.join(map(str, digits)))
        result = list(map(int, str(digit+1)))

        return result

Solution 2 模拟进位

  1. 反向遍历。
  2. 当前位的数字如果小于9则加1,否则为0。
  3. 之后,如果当前位的数字不为0(证明没有进位),则返回。
  4. 否则,继续第二步。
  5. 如果所有位都为9,则在最前面插入1。
class Solution:
    def plusOne(self, digits):
        for i in range(len(digits)-1, -1, -1):
            digits[i] = digits[i] + 1 if digits[i] < 9 else 0
            if digits[i]:   # bool(0) == False
                return digits
        digits.insert(0, 1)
        return digits

Go

func plusOne(digits []int) []int {
    for i := len(digits) - 1; i >= 0; i-- {
        digits[i]++
        if digits[i] != 10 {
            return digits
        }

        digits[i] = 0
    }

    digits[0] = 1
    digits = append(digits, 0)
    return digits
}

Go

func plusOne(digits []int) []int {
	l := len(digits)
	if l < 1 {
		return []int{1}
	}

	carry := 0
	digits[l-1]++

	for i := l - 1; i >= 0; i-- {
		n := digits[i] + carry
		digits[i], carry = n%10, n/10
	}

	if carry > 0 {
		digits = append([]int{carry}, digits...)
	}

	return digits
}

# ~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1
class Solution:
    def plusOne(self, digits):
        for i in range(len(digits)):
            if digits[~i] < 9:
                digits[~i] += 1
                return digits
            digits[~i] = 0
        # return [1] + [0] * len(digits)
        digits.insert(0, 1)
        return digits

Solution 3 functools.reduce

from functools import reduce

class Solution:
    def plusOne(self, digits):

        nums = reduce(lambda x, y: x * 10 + y, digits) + 1
        return [int(i) for i in str(nums)]

# 模拟reduce
class Solution:
    def plusOne(self, digits):
        num = 0
        for i in range(len(digits)):
            num = num*10 + digits[i]
        return [int(i) for i in str(num + 1)]