Expression Add Operators【282】




public class Solution {
	
    public List<String> addOperators(String num, int target) {
    	List<String> list = new ArrayList<String>();
        if(num == null || num.length() == 0) return list;
    	char ch[] = num.toCharArray();
    	String path = "";
    	getInfo(list,path,ch,target,0,0,0);
		return list;
        
    }
    
    public void getInfo(List<String> list ,String path, char ch[] , int target, int pos, int eval , int multed ){
    	if(pos == ch.length){
    		if(eval == target){
    		    if(!path.startsWith("-")){
    			    list.add(path);
    		    }
    		}
    		return;
    	}
    	for(int i=pos;i<ch.length;i++){
    		if(i!=pos && ch[pos] == '0') break;
    		int cur = 0;
//    		if(i+1<ch.length)
    		cur = combine(ch,pos,i+1);
    		
    		if(pos == 0){
    			getInfo(list,path+cur,ch,target,i+1,cur,cur);
    		}else{
    			getInfo(list,path+"+"+cur,ch,target,i+1,eval+cur,cur);
    			getInfo(list,path+"-"+cur,ch,target,i+1,eval-cur,-cur);
    			getInfo(list,path+"*"+cur,ch,target,i+1,eval-multed+cur*multed,cur*multed);
    		}
    	}
    	
    }
    
    public int combine(char ch[],int begin,int end){
    	int temp=0;
    	for(int i=begin;i<end;i++){
    		temp=temp*10+(ch[i]-'0');
    	}
    	return temp;
    }
}



说明:此题确实有些难度。首先自己对递归的理解不算特别透彻,所以在分析递归的时候有点头大;其次做此题时也陷入了是否要用后缀表达式求值的问题,最后参考了别人的代码(核心逻辑基本没有改变)完成了此题。


总结:此题有待深思熟虑,需要去深入了解递归的相关内容 plus 基本运算的逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值