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
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值