Erlo

力扣第66题-加一

2025-03-05 23:29:09 发布   16 浏览  
页面报错/反馈
收藏 点赞

一、力扣第66题:加一

1.1 题目描述

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

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

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

 

示例 1:

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

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

输入:digits = [9]
输出:[1,0]
解释:输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此,结果应该是 [1,0]。
 

提示:

1 

1.2 题目分析

首先,题目描述比较简单,就是用一个数组表示非负整数,比如说[1, 2, 3]就表示整数123,[0]就表示整数0,。

然后题目给出我们数组,我们要计算出这个数组所表示的整数加一后,又将其表示为数组,最终得到结果数组返回回来即可。

这个问题其实较为简单,在python中,我们有两种解法:第一种解法是借助整数和字符串之间的相互转化;第二种方法是通过计算最后得到需要的值,下面一一来看。

1.3 解题方法和代码

1.3.1 使用字符串和整数相互转化的方法 - 时间复杂度O(N)

  1. 代码思路
    我们首先将原列表的每个整数转换成字符串,然后将他们全部拼接到一起,然后转换成整数,将这个整数加一,然后将加一的整数转换成字符串,将这个字符串又分割成一个字符列表,最后将这个字符列表的每一个元素转换成整数再返回即可,注意处理第一位等于0的情况。
  2. 代码实现
class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        # 使用字符串和整数的相互转换
        string_list = ''.join([str(item) for item in digits])
        if string_list[0] == '0':
            return [1]
        else:
            number = int(string_list)
            number += 1
            string = str(number)
            number_lst = [int(item) for item in string]
            return number_lst

1.3.2 数学计算 - 时间复杂度O(N)

  1. 代码思路
    首先我们要根据原列表计算出列表代表的数是多少,那么我们可以根据一个公式:
    ∑(digits[i] * (10 ^ length - i - 1))
    其中i表示数组的偏移,从0len(digits)-1,其中^代表乘方的意思,如2 ^ 3 = 8
    上面这个公式不懂的可以自己画一个图来一个个带入看看,最终得到的结果就是这个数组表示的数。
    转换成数后,将这个数表示成数组即可,转换的方法也是很常见的算法,在文章的最后有讲到,一定要看到最后哦!

  2. 代码实现
    直接上代码:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        # 计算
        if digits[0] == 0:
            return [1]
        if digits[-1] != 9:
            digits[-1] = digits[-1] + 1
            return digits
        number_origin = 0

        # 将数组存储的数据计算得到整数
        for i in range(len(digits)-1, -1, -1):
            number_origin += digits[i] * (10 ** (len(digits) - i - 1))
        # 整数加一即为需要返回的列表相关的数
        number_origin += 1
        return_list = []
        while number_origin > 0:
            n = number_origin // 10  # 取整
            return_list.append(number_origin % 10)
            number_origin = n
        return return_list[::-1]

二、 补充:

下面的算法可以将123以3 2 1的方式打印出来!注意打印出来是倒序,我们依次将这些数据存进数组以后也是倒序,还需要重新再逆序一次!

## 依次打印一个数的个位、十位、百位......
number = 123
while number > 0:
	n = number // 10
	print(number % 10)
	number = n
## 将一个列表逆序
## 在python中可以很容易将一个列表逆序:reverse_list = a_list[::-1]

# 使用代码将列表逆序
a_list = [1,2,3,4,6,5]
n = len(a_list)
for i in range(n // 2):
	a_list[i], a_list[n - i - 1] = a_list[n - i - 1], a_list[i]
print(a_list)

三、 总结

这里的题目可以使用字符串和整数相互转换的方式解决,这样的方式也很容易理解并实践,但是有条件的同学还是建议使用数学计算的方法,一来培养自己的数学和计算机思维,二来也可以熟悉使用的编程语言,好了,今天就到这了,祝大家暴富暴瘦,拜了个拜!

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认