IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode-每日一题 282. 给表达式添加运算符 [Java实现] -> 正文阅读

[数据结构与算法]LeetCode-每日一题 282. 给表达式添加运算符 [Java实现]

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

示例 1:

输入: num = "123", target = 6
输出: ["1+2+3", "1*2*3"]?


方法一:回溯

????????由题意,每一次对数的操作(截取1~n位)都存在 + - * 三种运算可能,对于 + - 两种操作,我们之间将 计算总值+/-当前截取数值 即可获取新的总值,而对于 * 这一运算,由于其具有的优先级,我们还需维护一个变量储存上一位截取值才能得出乘法下新的总值

????????在示例代码中,我们维护一个 List 来便于对储存的字符串进行一系列的回溯操作(类似于一个栈,但比栈要更便捷

    private List<String> result;
    private char[] nums;
    private int target;

    public List<String> addOperators(String num, int target) {
        this.result = new ArrayList<>(1 << 3);
        this.nums = num.toCharArray();
        this.target = target;
        backtrace(0, 0, 0, new ArrayList<>(1 << 3));
        return result;
    }

    private void backtrace(int index, long preNumber, long correct, List<String> store) {
        if (index == nums.length) {
            if (correct == target) {
                StringBuilder builder = new StringBuilder();
                store.forEach(builder::append);
                result.add(builder.toString());
            }
            return;
        }
        for (int i = index; i < nums.length; ++ i) {
            if (i != index && nums[index] == '0') break;
            long number = Long.parseLong(new String(nums, index, i-index+1));
            if (index == 0) {
                store.add(String.valueOf(number));
                backtrace(i+1, number, number, store);
                store.remove(store.size()-1);
            } else {
                store.add("+" + number);
                backtrace(i+1, number, correct+number, store);
                store.remove(store.size()-1);

                store.add("-" + number);
                backtrace(i+1, -number, correct-number, store);
                store.remove(store.size()-1);

                store.add("*" + number);
                long multi = preNumber*number;
                backtrace(i+1, multi, correct-preNumber+multi, store);
                store.remove(store.size()-1);
            }
        }
    }
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 12:14:11  更:2021-10-17 12:14:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:38:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码