文章目录
241 为运算表达式设计优先级
注意:添加了一个map来存储已经计算过的数据,减少重复计算
public Map<String,List<Integer>> map=new HashMap<>();
public List<Integer> diffWaysToCompute(String input) {
if(map.containsKey(input))
return map.get(input);
List<Integer> result=new LinkedList<>();
if(input==null || input.length()==0)
return result;
int len=input.length();
for(int i=0;i<len;i++){
char c=input.charAt(i);
if(c=='+' || c=='-' || c=='*'){
List<Integer> left=diffWaysToCompute(input.substring(0,i));
List<Integer> right=diffWaysToCompute(input.substring(i+1));
for(int l:left){
for(int r:right){
if(c=='+'){
result.add(l+r);
}else if(c=='-'){
result.add(l-r);
}else{
result.add(l*r);
}
}
}
}
}
if(result.size()==0){
result.add(Integer.valueOf(input));
}
map.put(input,result);
return result;
}
95 不同的二叉搜索树 II
同上题,用一个map来保存已经计算过的数据,由于有两个参数l和h,故采用l+"_"+h来作为健
HashMap<String,List<TreeNode>> map=new HashMap<>();
public List<TreeNode> generateTrees(int n) {
if(n<=0)
return new ArrayList<>();
return generateTreesCore(1,n);
}
public List<TreeNode> generateTreesCore(int l,int h){
String ss=l+"_"+h;
if(map.containsKey(ss)){
return map.get(ss);
}
List<TreeNode> result=new ArrayList<>();
if(l>h){
result.add(null);
return result;
}
for(int i=l;i<=h;i++){
List<TreeNode> leftNodes=generateTreesCore(l,i-1);
List<TreeNode> rightNodes=generateTreesCore(i+1,h);
for(TreeNode nodeL:leftNodes){
for(TreeNode nodeR:rightNodes){
TreeNode node=new TreeNode(i);
node.left=nodeL;
node.right=nodeR;
result.add(node);
}
}
}
map.put(ss,result);
return result;
}