(num, target)
return res
:type num: str
    :type target: int
    :rtype: List[str]
:type num: str
    :type target: int
    :rtype: List[str]
: type num : str : type target : int : rtype : List [ str ]
def add_operators(num, target):
    """
    :type num: str
    :type target: int
    :rtype: List[str]
    """

    def dfs(res, path, num, target, pos, prev, multed):
        if pos == len(num):
            if target == prev:
                res.append(path)
            return
        for i in range(pos, len(num)):
            if i != pos and num[pos] == '0':  # all digits have to be used
                break
            cur = int(num[pos:i+1])
            if pos == 0:
                dfs(res, path + str(cur), num, target, i+1, cur, cur)
            else:
                dfs(res, path + "+" + str(cur), num, target,
                    i+1, prev + cur, cur)
                dfs(res, path + "-" + str(cur), num, target,
                    i+1, prev - cur, -cur)
                dfs(res, path + "*" + str(cur), num, target,
                    i+1, prev - multed + multed * cur, multed * cur)

    res = []
    if not num:
        return res
    dfs(res, "", num, target, 0, 0, 0)
    return res
def add_operators ( num , target ) : def dfs ( res , path , num , target , pos , prev , multed ) : if pos == len ( num ) : if target == prev : res . append ( path ) return for i in range ( pos , len ( num ) ) : if i != pos and num [ pos ] == '0' : # all digits have to be used break cur = int ( num [ pos : i + 1 ] ) if pos == 0 : dfs ( res , path + str ( cur ) , num , target , i + 1 , cur , cur ) else : dfs ( res , path + "+" + str ( cur ) , num , target , i + 1 , prev + cur , cur ) dfs ( res , path + "-" + str ( cur ) , num , target , i + 1 , prev - cur , - cur ) dfs ( res , path + "*" + str ( cur ) , num , target , i + 1 , prev - multed + multed * cur , multed * cur ) res = [ ] if not num : return res dfs ( res , "" , num , target , 0 , 0 , 0 ) return res