Add Operators

http://www.lintcode.com/en/problem/add-operators/

public class Solution {
    /*
     * @param num: a string contains only digits 0-9
     * @param target: An integer
     * @return: return all possibilities
     */
    List<String> res; 
    String num;
    int target;

    public List<String> addOperators(String num, int target) {
        // write your code here
        res = new ArrayList<>();
        this.num = num;
        this.target = target;

        dfs(0, "", 0, 0);

        return res;
    }

    private void dfs(int start, String str, long sum, long last){
        if(start == num.length()){
            if(sum == target){
                res.add(new String(str));    
            }
            return;
        }

        for(int i = start; i < num.length(); i++){
            long val = Long.parseLong(num.substring(start, i + 1));

            if(start == 0){
                dfs(i + 1, str + val, val, val);
            }else{
                dfs(i + 1, str + "+" + val, sum + val, val);
                dfs(i + 1, str + "-" + val, sum - val, -val);
                dfs(i + 1, str + "*" + val, sum - last + last * val, last * val);
            }

            if(num.charAt(start) == '0'){
                break;
            }
        }
    }
}

Factorization

http://www.lintcode.com/zh-cn/problem/factorization/

public class Solution {
    /**
     * @param n an integer
     * @return a list of combination
     */

    List<List<Integer>> ans = new ArrayList<>();
    List<Integer> path = new ArrayList<>();

    void dfs(int start, int remain) {
        if (remain == 1) {
            if (path.size() != 1) {
                ans.add(new ArrayList<>(path)); //deep copy
            }
            return;
        }

        for (int i = start; i <= remain; i++) {
            if (i > remain / i) {
                break;
            }
            if (remain % i == 0) {
                path.add(i);                  //进栈
                dfs(i, remain / i);
                path.remove(path.size() - 1); //出栈
            }
        }

        path.add(remain);
        dfs(remain, 1);
        path.remove(path.size() - 1);
    }

    public List<List<Integer>> getFactors(int n) {
        // write your code here
        dfs(2, n);
        return ans;
    }
}

results matching ""

    No results matching ""