Leetcode 282, Expression Add Operators

来源:互联网 发布:网络监控服务器搭建 编辑:程序博客网 时间:2024/05/15 12:28


    public List<String> addOperators(String num, int target) {        List<String> res = new ArrayList<String>();        helper(res, "", target, num, 0, 0);        return res;    }        private void helper(List<String> res, String tmp, int target, String num, long currRes, long prevNum){        // 如果计算结果等于目标值,且所有数都用完了,则是有效结果        if(currRes == target && num.length() == 0){            String exp = new String(tmp);            res.add(exp);            return;        }        // 搜索所有可能的拆分情况        for(int i = 1; i <= num.length(); i++){            String currStr = num.substring(0, i);            // 对于前导为0的数予以排除            if(currStr.length() > 1 && currStr.charAt(0) == '0'){                // 这里是return不是continue                return;            }            // 得到当前截出的数            long currNum = Long.parseLong(currStr);            // 去掉当前的数,得到下一轮搜索用的字符串            String next = num.substring(i);            // 如果不是第一个字母时,可以加运算符,否则只加数字            if(tmp.length() != 0){                // 乘法                helper(res, tmp+"*"+currNum, target, next, (currRes - prevNum) + prevNum * currNum, prevNum * currNum);                // 加法                helper(res, tmp+"+"+currNum, target, next, currRes + currNum, currNum);                // 减法                helper(res, tmp+"-"+currNum, target, next, currRes - currNum, -currNum);             } else {                // 第一个数                helper(res, currStr, target, next, currNum, currNum);            }        }    }

Refer: https://segmentfault.com/a/1190000003797204





0 0