66. 加一(LeetCode)

mac2024-03-10  25

题目: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 要求:最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。

分析: 本题的关键是“进位”,如果最后一个数字加一是小于10 的数字,则只需要将数组的最后一个元素加一即可。关键是面对进位如何处理? 例如:99,如何转为100?

方法一: 通过将数组中的数字转换为具体意义中的数字后,作加一的运算,再将得到后的数字转换为数组的形式。

class Solution: def plusOne(self, digits: List[int]) -> List[int]: sums = 0 # 首先计算得出数组中存储的数字本身 for i in range(len(digits)): sums += 10**(len(digits)-1-i)*digits[i] # 将数字转换为字符串 sums_str = str(sums + 1) # 将字符串再次转换为列表 return [int(j) for j in sums_str]

方法二: 直接在数组中进行加一的操作。首先按照从尾到头的顺序判断是否等于九,再分别做相应的处理。

class Solution: def plusOne(self, digits: List[int]) -> List[int]: # 从尾到头遍历 for i in range(len(digits)-1, -1, -1): # 判断如果不等于9,返回加一后的数字 if digits[i] != 9: digits[i] += 1 return digits # 如果等于九,令这一位置元素为0,继续判断上一个元素的值 digits[i] = 0 # 如果上方元素都等于9,令第一个元素为1,并且在元组后面再加一个0. digits[0] = 1 digits.append(0) return digits

结论:本题的关键是处理临界点数字9,两种方法分别在数字和列表的角度进行处理。

最新回复(0)