LeetCode:Expression Add Operators

题目链接:https://leetcode.com/problems/expression-add-operators/、

题目:

Given a string that contains only digits 0-9 and a target value, return all possibilities to add binaryoperators (not unary) +-, or * between the digits so they evaluate to the target value.

Examples: 

"123", 6 -> ["1+2+3", "1*2*3"] 
"232", 8 -> ["2*3+2", "2+3*2"]
"105", 5 -> ["1*0+5","10-5"]
"00", 0 -> ["0+0", "0-0", "0*0"]
"3456237490", 9191 -> []

题意:给定一个包含0-9的字符串和一个目标值,返回对字符串中字符的所有可能的运算来得到目标值

方法:递归

注意:在运算乘法时应该将前一步运算移除

public class Solution {
	public List<String> addOperators(String num, int target) {
		List<String> result = new ArrayList<String>();
		addOperatorsDFS(num, target, 0, 0, "", result);
		return result;
	}
	
	public void addOperatorsDFS(String num, int target, long diff, long curNum, String out, List<String> result) {
		if(num.length() == 0 && curNum == target) {
			result.add(out);
		}
		
		for(int i=1; i<=num.length(); i++) {
			String cur = num.substring(0,i);
			if(cur.length() > 1 && cur.charAt(0) == '0') 
				return;
			String next = num.substring(i);
					
			if(out.length() > 0) {
			    addOperatorsDFS(next, target, Long.parseLong(cur), curNum + Long.parseLong(cur), out+"+"+cur, result);
				addOperatorsDFS(next, target, -Long.parseLong(cur), curNum - Long.parseLong(cur), out+"-"+cur, result);
				addOperatorsDFS(next, target, diff*Long.parseLong(cur), curNum - diff + diff*Long.parseLong(cur), out+"*"+cur, result);
				
			} else {
				addOperatorsDFS(next, target, Long.parseLong(cur), Long.parseLong(cur), cur, result); 
			}
		}
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值