自学内容网 自学内容网

Leetcode 66. 加一

Leetcode 66. 加一

一、题目描述

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:
输入:digits = [0]
输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

二、我的想法

1.最开始的想法是将所有数字转成字符串,字符串转成数字类型之后加一,然后再转成列表类型。但是没写哈哈。
2.后来想到的是我干脆在列表里操作,用单指针。先将最后一位的数字 +1,使指针指向它。如果加一后变为 10 了,就进入循环操作:将 10 改成 0 ,指针前移一位;
(1)如果前移之后指向 0 之前了,说明列表应该从 “999” 变为 “1000” 了,即需要在列表最前端加一个数字 1;
(2)如果前移之后之后没有指向 0 之前,那就正常将数字 +1 就可以了。

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        digits[-1] += 1
        digitsLen = len(digits) - 1
        while digits[digitsLen] == 10:
            digits[digitsLen] = 0
            digitsLen -= 1
            if digitsLen != -1:
                digits[digitsLen] += 1
            else:
                digits[0] = 0
                digits.insert(0, 1)
                return digits
        return digits

三、其他人的题解

Hushด้้้ 的题解 python纯小白写法,只有歪门邪路,不考虑任何效率,这个就是转成字符串之后再操作的。

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        s = '' 
        l = []
        for i in digits:
            s = s + str(i) #全部转换成字符串
        for n in str(int(s) + 1): #字符串转换成int类型然后+1,再遍历字符串 添加到数组
            l.append(int(n))
        return l

原文地址:https://blog.csdn.net/li_yizhixiaowukong/article/details/140601574

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!