Leetcode 282. 给表达式添加运算符
本文最后更新于315 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com

1.题目基本信息

1.1.题目描述

给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回 所有 能够得到 target 的表达式。

注意,返回表达式中的操作数 不应该 包含前导零。

1.2.题目地址

https://leetcode.cn/problems/expression-add-operators/description/

2.解题方法

2.1.解题思路

回溯

2.2.解题步骤

第一步,构建回溯递归函数。在num[:i]范围内的表达式为expr,计算值为res,最后一个乘法值为mul的情况下;枚举num[i]及后面的连续数字组合,以及前置相邻的运算符号,并更新维护变量;并在递归出口处将合法的组合添加到result数组中

  • 1.1.递归出口;i==n,即遍历完的情况,如果组合合法,则添加到result中

  • 1.2.枚举后面的数以及当前的计算符号

    • 1.2.1.考虑当前字母为0的情况

    • 1.2.2.当前字符为num第一个字符的情况,此时无需枚举计算符号

    • 1.2.3.当前字符不是num第一个字符的情况,此时需要枚举计算符号

第二步,调用回溯,返回result

3.解题代码

python代码

class Solution:
    def addOperators(self, num: str, target: int) -> List[str]:
        # 思路:回溯
        n = len(num)
        # 第一步,构建回溯递归函数。在num[:i]范围内的表达式为expr,计算值为res,最后一个乘法值为mul的情况下;枚举num[i]及后面的连续数字组合,以及前置相邻的运算符号,并更新维护变量;并在递归出口处将合法的组合添加到result数组中
        result = []
        def backtrack(expr:list[str], i:int, res:int, mul:int):
            # 1.1.递归出口;i==n,即遍历完的情况,如果组合合法,则添加到result中
            if i == n:
                if res == target:
                    result.append("".join(expr))
                return
            # 1.2.枚举后面的数以及当前的计算符号
            index = len(expr)
            if i > 0:
                expr.append("")    # 记录计算符号的位置,并进行占位(后面会添加数字)
            val = 0
            for j in range(i, n):
                # 1.2.1.考虑当前字母为0的情况
                if j > i and num[i] == '0':
                    break
                val = val * 10 + int(num[j])
                expr.append(num[j])
                if i == 0:
                    # 1.2.2.当前字符为num第一个字符的情况,此时无需枚举计算符号
                    backtrack(expr, j + 1, val, val)
                else:
                    # 1.2.3.当前字符不是num第一个字符的情况,此时需要枚举计算符号
                    expr[index] = "+"; backtrack(expr, j + 1, res + val, val)
                    expr[index] = "-"; backtrack(expr, j + 1, res - val, -val)
                    expr[index] = "*"; backtrack(expr, j + 1, res - mul + mul * val, mul * val)
            del expr[index:]    # 回溯,这里用截取赋值会超时
        # 第二步,调用回溯,返回result
        backtrack([], 0, 0, 0)
        return result

4.执行结果

觉得有帮助可以投喂下博主哦~感谢!

作者:geek007

转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇