• 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);
            }
        }
    }
    
  • 相关阅读:
    socket上传nsdictionary的json数据异常
    Eclipse中如何关联Javadoc
    《算法导论》读书笔记之第8章 线性时间排序
    《算法导论》读书笔记之第6章 堆排序
    《算法导论》读书笔记之第3章 函数的增长
    《算法导论》读书笔记之第2章 算法入门
    《算法导论》读书笔记之第7章 快速排序
    堆排序
    八皇后
    行指针的理解
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946622.html
Copyright © 2020-2023  润新知