给定一个仅包含数字的字符串 num 和一个目标值 target,在 num 的数字之间添加二元运算符 "+" , "-" 或 "*" ,返回所有能够得到目标值的表达式。
数据范围:字符串长度满足 , nums 中仅包含数字,
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @param target int整型 * @return string字符串一维数组 * @return int* returnSize 返回数组行数 * * C语言声明定义全局变量请加上static,防止重复定义 */ char** addOpt(char* num, int target, int* returnSize ) { // write code here return NULL; }
function addOpt( num , target ) {
const nums = [...num]
const res = []
let str = nums[0]
const fn = (s, index) => { if (index >= nums.length) { if (eval(s) == target) { res.push(s) } return } fn(`${s}+${nums[index]}`, index + 1) fn(`${s}-${nums[index]}`, index + 1) fn(`${s}*${nums[index]}`, index + 1) } fn(str, 1) return res
}
package main import "strconv" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @param target int整型 * @return string字符串一维数组 */ func addOpt( num string , target int ) []string { ans:=[]string{} var dfs func(string,int,int) dfs=func(s string,sum int,idx int){ if idx==len(num){ if sum==target{ ans=append(ans,s) } return } str:=string(num[idx]) x,_:=strconv.Atoi(str) dfs(s+"+"+str,sum+x,idx+1) dfs(s+"-"+str,sum-x,idx+1) dfs(s+"*"+str,sum*x,idx+1) } str:=string(num[0]) x,_:=strconv.Atoi(str) dfs(str,x,1) return ans }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @param target int整型 * @return string字符串一维数组 */ List<String> res = new ArrayList<>(); public String[] addOpt (String num, int target) { // write code here char[] ch = num.toCharArray(); int cnt=ch[0]-'0'; String str = ""+ch[0]; process(ch, cnt, str, 1, target); return res.toArray(new String[0]); } public void process(char[] ch, int cnt, String str, int index, int target){ if(index>=ch.length){ if(cnt==target){ res.add(str); } return; } int cur= ch[index]-'0'; process(ch, cnt+cur, str+"+"+ch[index], index+1, target); process(ch, cnt-cur, str+"-"+ch[index], index+1, target); process(ch, cnt*cur, str+"*"+ch[index], index+1, target); } }
class Solution: def addOpt(self , num: str, target: int) -> List[str]: # write code here def dfs(num, target,stack, cur, ret): if not num: if sum(stack) == target: ret.append(cur) return for i in range(len(num)): if i > 0 and num[i] == "0": return n = int(num[:i+1]) dfs(num[i+1:], target, stack+[n], cur+"+"+str(n), ret) dfs(num[i+1:], target, stack+[-n], cur+"-"+str(n), ret) temp = stack[-1] dfs(num[i+1:], target, stack[:-1]+[temp*n],cur+"*"+str(n),ret) ret = [] s = "" for i in range(len(num)): if i > 0 and num[i] == "0": break n = int(num[:i+1]) dfs(num[i+1:], target, [n], str(n), ret) return ret
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num string字符串 * @param target int整型 * @return string字符串vector */ // 我觉得应该是用例比较简单 下面的代码才能过 不然我感觉 应该是不是这个思路 vector<string> addOpt(string num, int target) { // write code here vector<string> res; int a = num[0] - '0'; string s = ""; s+= num[0]; for(int i=1; i<num.length(); i++) { a += num[i] - '0'; s += '+'; s += num[i]; } if(a == target) res.push_back(s); a = num[0] - '0'; s = ""; s += num[0]; for(int i=1; i<num.length(); i++) { a *= num[i] - '0'; s += '*'; s += num[i]; } if(a == target) res.push_back(s); a = num[0] - '0'; s = ""; s += num[0]; for(int i=1; i<num.length(); i++) { a -= num[i] - '0'; s += '-'; s += num[i]; } if(a == target) res.push_back(s); return res; } };