java 241.添加括号的不同方法(1st).java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 241.添加括号的不同方法(1st).java相关的知识,希望对你有一定的参考价值。

public class Solution {
    public List<Integer> diffWaysToCompute(String input) {
        List<Integer> res = new ArrayList<Integer>();
        for(int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if(c == '+' || c == '-' || c == '*') {
                String left = input.substring(0, i);
                String right = input.substring(i + 1);
                List<Integer> leftValues = diffWaysToCompute(left);
                List<Integer> rightValues = diffWaysToCompute(right);
                for (int l : leftValues) {
                    for (int r : rightValues) {
                        if (c == '+') res.add(l + r);
                        else if (c == '-') res.add(l - r);
                        else if (c == '*') res.add(l * r);
                    }
                }
            }
        }
        if (res.size() == 0) res.add(Integer.valueOf(input));
        return res;
    }
}
public class Solution {
    public List<Integer> diffWaysToCompute(String input) {
        List<Integer> rst=new ArrayList<Integer>();
        if(input==null || input.length()==0){
            return rst;
        }
        
        HashMap<String,List<Integer>> map=new HashMap<String, List<Integer>>();
        rst=diffWaysToCompute(input,map);
        return rst;
        
    }
    
    
    public List<Integer> diffWaysToCompute(String input, HashMap<String,List<Integer>> map){
        if(map.containsKey(input)){
            return map.get(input);
        }
        
        List<Integer> list=new ArrayList<Integer>();
        for(int i=0;i<input.length();i++){
            if(input.charAt(i)=='+' || input.charAt(i)=='-' || input.charAt(i)=='*'){
                List<Integer> leftList=diffWaysToCompute(input.substring(0,i), map);
                List<Integer> rightList=diffWaysToCompute(input.substring(i+1), map);
                
                for(int leftn : leftList){
                    for(int rightn : rightList){
                        if(input.charAt(i)=='+'){
                            list.add(leftn+rightn);
                        }else if(input.charAt(i)=='-'){
                            list.add(leftn-rightn);
                        }else if(input.charAt(i)=='*'){
                            list.add(leftn*rightn);
                        }
                    }
                }
            }
        }
        
        if(list.size()==0 && input.length()!=0){
            list.add(Integer.parseInt(input));
        }
        
        map.put(input,list);
        return list;
    }
    
    
}

以上是关于java 241.添加括号的不同方法(1st).java的主要内容,如果未能解决你的问题,请参考以下文章

java 241.添加括号的不同方法(1st).java

java 241.添加括号的不同方法(1st).java

java 241.添加括号的不同方法(1st).java

java 241.添加括号的不同方法(1st).java

LeetCode 241 的时间和空间复杂度是多少。添加括号的不同方法?

添加括号的不同方法 241