首页 > 其他 > 详细

LeetCode Expression Add Operators

时间:2015-10-29 06:16:32      阅读:217      评论:0      收藏:0      [点我收藏+]

原题链接在这里:https://leetcode.com/problems/expression-add-operators/

用DFS, 递归来解两个变量 cur 和 diff, cur 记录当前运算后的结果,diff用来记录最后变化的值。e.g. 2+3*2,即将要运算到乘以2的时候,上次循环的cur = 5, diff = 3, 而要算这个乘2的时候,需要新进行乘法运算,所以需要把diff从cur中先 减掉,在加上新的diff. 新的 diff 是3*2=6. 

数字是可以合并出现的,比如"123", 15能返回"12+3".

若是出现 2*05 这种情况,要排除。

Long 和 Integer 都有 Long.valueOf(string)的method.

用Long型是防止溢出。

AC Java:

public class Solution {
    public List<String> addOperators(String num, int target) {
        List<String> res = new ArrayList<String>();
        dfs(num, target, 0, 0, "", res);
        return res;
    }
    
    private void dfs(String num, int target, long cur, long diff, String temp, List<String> res){
        if(cur == target && num.length() == 0){
            res.add(temp);
            return;
        }
        for(int i = 1; i<=num.length(); i++){
            String str = num.substring(0,i);
            if(str.length() > 1 && str.charAt(0) == ‘0‘){ // corner case like 1*05
                break;
            }
            String next = num.substring(i);
            if(temp.length() == 0){
                dfs(next, target, Long.parseLong(str), Long.parseLong(str), str, res);
            }else if(temp.length() > 0){
                dfs(next, target, cur + Long.valueOf(str), Long.valueOf(str), temp + "+" + str, res);
                dfs(next, target, cur - Long.valueOf(str), -Long.valueOf(str), temp + "-" + str, res);
                dfs(next, target, (cur-diff) + diff*Long.valueOf(str), diff*Long.valueOf(str), temp + "*" + str, res);
            }
        }
    }
}

 

LeetCode Expression Add Operators

原文:http://www.cnblogs.com/Dylan-Java-NYC/p/4919251.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!