zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 282 给表达式添加运算符

    282. 给表达式添加运算符

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

    示例 1:

    输入: num = “123”, target = 6
    输出: [“1+2+3”, “123”]
    示例 2:

    输入: num = “232”, target = 8
    输出: [“23+2", "2+32”]
    示例 3:

    输入: num = “105”, target = 5
    输出: [“1*0+5”,“10-5”]
    示例 4:

    输入: num = “00”, target = 0
    输出: [“0+0”, “0-0”, “0*0”]
    示例 5:

    输入: num = “3456237490”, target = 9191
    输出: []

    class Solution {
       char[] num;
        char[] exp;
        int target;
        List<String> res;
        public List<String> addOperators(String num, int target) {
            this.res = new ArrayList<>();
            this.num = num.toCharArray();
            this.target = target;
            this.exp = new char[num.length()*2];
            dfs(0,0,0,0);
            return res;
        }
    
        private void dfs(int pos,int len,long prev,long curr) {
            if(pos == num.length) {
                if(curr==target) {
                    res.add(new String(exp,0,len));
                }
                return;
            }
            /**
             * s 记录该次 dfs的起始位置
             * pos是num的位置
             */
            int s = pos;
            /**
             * len是 放数字 的位置
             * l是 放运算符 的位置
             */
            int l = len;
            if(s!=0) {
                len++;
            }
            long n = 0;
            while (pos < num.length){
                if(num[s] =='0' && pos-s>0) {
                    break;
                }
                n = n*10+(int)(num[pos] -'0');
                if(n > Integer.MAX_VALUE){
                    break;
                }
                exp[len++] = num[pos++];
                if(s==0) {
                    dfs(pos,len,n,n);
                    continue;
                }
                exp[l] = '+';
                dfs(pos,len,n,curr+n);
                exp[l] = '-';
                dfs(pos,len,-n,curr-n);
                exp[l] = '*';
                dfs(pos,len,prev*n,curr-prev+prev*n);
            }
        }
    }
    
  • 相关阅读:
    第一节 变量与常量
    go语言学习笔记
    Java日期时间API系列41-----根据毫秒值计算倒计时
    数据库DML(数据操纵)
    数据库概述和DDL(数据库定义)
    软件测试基础理论
    软件测试学习大纲
    matplotlib
    pandas详细应用和文件处理
    DataFrame
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946622.html
Copyright © 2011-2022 走看看