首页 > 试题广场 >

给表达式添加运算符

[编程题]给表达式添加运算符
  • 热度指数:1002 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个仅包含数字的字符串 num 和一个目标值 target,在 num 的数字之间添加二元运算符 "+" , "-" 或 "*" ,返回所有能够得到目标值的表达式。

数据范围:字符串长度满足 , nums 中仅包含数字,
示例1

输入

"123",6

输出

["1+2+3","1*2*3"]
示例2

输入

"00",0

输出

["0+0","0*0","0-0"]
刷牛客以来遇到的最离谱的一题,这也能过?
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @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;
}


发表于 2022-08-28 21:48:02 回复(0)

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

}

发表于 2023-03-30 09:26:45 回复(0)
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
}

发表于 2023-03-17 09:18:24 回复(0)
java
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);
    }
}


发表于 2022-11-09 18:07:13 回复(1)
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

发表于 2022-10-03 20:51:42 回复(0)
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;
    }
};

发表于 2022-09-08 11:44:39 回复(0)

问题信息

难度:
6条回答 3180浏览

热门推荐

通过挑战的用户

查看代码