加一 leetcode

文章讨论了两种不同的Python代码实现将数字列表加一的方法。第一种方法涉及反转列表、计算新值和转换回列表,但效率较低。第二种方法从列表末尾开始遍历,逐位加一,对全9的情况处理更简洁。通过优化,如预先计算列表长度,可以提高第二种方法的性能。
摘要由CSDN通过智能技术生成

问题描述

懒得写

思路

计划将digits中左右数值提取出来,乘10的某次方,于是将其表达为一个完整的数值,并加一。

再将其转化为字符串类型,再将每个位值的数值转化为整数型,添加进一个列表里。

最后返回这个列表。

class Solution: def plusOne(self, digits: List[int]) -> List[int]: 
	reversed_digits = digits[::-1] 
	val = 0 
	for i in range(len(digits)): 
		val += reversed_digits[i]*(10**i) 
	val += 1 
	val_str = str(val) 
	digits_2 = [] 
	for j in range(len(val_str)): 
		digits_2.append(int(val_str[j])) 
	return digits_2

可惜效果太烂,击败10%。

问问chatgpt

def plusOne(digits):
    # 从数组最后一位开始遍历
    for i in range(len(digits)-1, -1, -1):
        digits[i] += 1
        digits[i] %= 10
        # 如果当前位加1后不等于10,则加1操作结束,直接返回数组
        if digits[i] != 0:
            return digits
    # 如果遍历完整个数组还没有返回,则说明原数字为全9数,需要在数组最前面添加一位1
    digits.insert(0, 1)
    return digits

原来如此,从digits最后一位数开始,依次加一并检查,如果这个数加1后不能被10整除,就代表这位数原本不是9,直接加一就好了。

如果最后一位数加一等于10,也就是能被10整除,则经过digits[i] %= 10后这里变成0,继续循环,往前一位加1,总有数不是9的嘛。

如果恰好所有数都是9,那么最后digits所有数都变成了0,但还没有return,直接用insert方法在最前面添加上1,代表10000。

最后return digits

十分甚至九分的妙啊,只是还是击败10%。。。。。。不如抄其他人的答案。

我看到一个相似的答案,不过他把最后两行改成了:

	return [1] + [0] * n

这段代码创建了一个列表,其中包含一个 1 和 n 个 0。具体来说,[1] 表示一个只包含一个元素 1 的列表,而 [0] * n 表示一个长度为 n 的列表,每个元素都是 0。

然后,这两个列表使用加号 + 进行拼接,得到的结果就是一个包含一个 1 和 n 个 0 的列表。因此,整个表达式 return [1] + [0] * n 的作用是返回一个长度为 n+1 的列表,第一个元素是 1,其余元素都是 0。

经过运行,发现很慢主要是len(digits)的问题,在一开始就先计算n = len(digits)就会变快很多了,醉了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值