66. 加一和67. 二进制求和

文章介绍了如何使用Python解决LeetCode上的两个问题:将整数列表加一并转换回列表,以及两个二进制字符串相加。提供了两种不同的代码实现,一种是利用内置函数,另一种是手动处理字符串和整数转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、66. 加一

1、题目描述:

2、题目分析

3、思路

第一份 我自己的代码

第二份 高手的代码(简洁)

二、67. 二进制求和

1、题目描述

2、思路

3、代码

(1)直接用函数int和bin(简单)

(2)不用函数(复杂点)


一、66. 加一

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]

2、题目分析

        就是将一个整数列表中的所有元素组成的整数实现加一,然后返回加一后的整数拆分后的列表,所以要考虑列表中元素的合并,拆分。

3、思路

        将整数列表中的元素转换为字符串合并,再转成整数,加一,再转为字符串,再拆成列表,列表字符元素转成整数就可以了。(第二份代码简洁的多)

第一份 我自己的代码
class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        for i in range(0,len(digits)):
            digits[i] = str(digits[i])    # 整数列表转字符串列表

        str_digits = ''.join(digits)    # 列表转字符串
        int_digits = int(str_digits)    # 字符串转整数
        int_digits += 1
        str_digits2 = str(int_digits)    # 整数转字符串
        list_digits2 = list(str_digits2)    # 字符串转字符串列表

        for i in range(0,len(list_digits2)):    # 字符串列表转整数列表
            list_digits2[i] = int(list_digits2[i])
        return list_digits2
第二份 高手的代码(简洁)
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

# 作者:Hushด้้้
# 链接:https://leetcode.cn/problems/plus-one/solutions/2208061/pythonchun-xiao-bai-xie-fa-# # zhi-you-wai-m-wc59/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

二、67. 二进制求和

1、题目描述

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = "11", b = "1"
输出:"100"

示例 2:

输入:a = "1010", b = "1011"
输出:"10101"

2、思路

        将二进制字符串转换为整数进行相加,再将结果转换为字符串返回即可。

3、代码

(1)直接用函数int和bin(简单)
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        int_a = int(a, 2)
        int_b = int(b, 2)
        int_c = int_a + int_b
        bin_c = bin(int_c)[2::]    # 切片去掉二进制前缀0b
        return bin_c
(2)不用函数(复杂点)
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        def str_to_int(c):    #二进制字符串转整数
            c = c[::-1]
            length = len(c)
            str_sum = 0
            for i in range(length):
                char_sum = int(c[i])*pow(2,i)
                str_sum += char_sum
            return str_sum


        def int_to_str(sum_int):    # 整数转二进制字符串
            str1 = ''
            while sum_int//2 > 0:
                char1 = sum_int % 2
                sum_int = sum_int//2
                str1 += str(char1)

            str1 += str(sum_int)
            return str1[::-1]

        int_a = str_to_int(a)
        int_b = str_to_int(b)
        sum_ab = int_a + int_b
        str_c = int_to_str(sum_ab)
        return str_c

本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值