OYStw5 发表于 6 天前

力扣第66题-加一

一、力扣第66题:加一

1.1 题目描述

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1:输入:digits = 输出:解释:输入数组表示数字 123。示例 2:输入:digits = 输出:解释:输入数组表示数字 4321。示例 3:输入:digits = 输出:解释:输入数组表示数字 9。加 1 得到了 9 + 1 = 10。因此,结果应该是 。 提示:1 <= digits.length <= 1000 <= digits <= 91.2 题目分析

首先,题目描述比较简单,就是用一个数组表示非负整数,比如说就表示整数123,就表示整数0,。
然后题目给出我们数组,我们要计算出这个数组所表示的整数加一后,又将其表示为数组,最终得到结果数组返回回来即可。
这个问题其实较为简单,在python中,我们有两种解法:第一种解法是借助整数和字符串之间的相互转化;第二种方法是通过计算最后得到需要的值,下面一一来看。
1.3 解题方法和代码

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


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


[*]代码思路
首先我们要根据原列表计算出列表代表的数是多少,那么我们可以根据一个公式:
∑(digits * (10 ^ length - i - 1))
其中i表示数组的偏移,从0到len(digits)-1,其中^代表乘方的意思,如2 ^ 3 = 8
上面这个公式不懂的可以自己画一个图来一个个带入看看,最终得到的结果就是这个数组表示的数。
转换成数后,将这个数表示成数组即可,转换的方法也是很常见的算法,在文章的最后有讲到,一定要看到最后哦!
[*]代码实现
直接上代码:
class Solution:    def plusOne(self, digits: List) -> List:      # 计算      if digits == 0:            return       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 * (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 = 123while number > 0:        n = number // 10        print(number % 10)        number = n## 将一个列表逆序## 在python中可以很容易将一个列表逆序:reverse_list = a_list[::-1]# 使用代码将列表逆序a_list = n = len(a_list)for i in range(n // 2):        a_list, a_list = a_list, a_listprint(a_list)三、 总结

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