给定一个长度为N的数字字符串str ,任务是通过在字符串的字符之间插入“+”运算符任意次数来找到所有可能表达式的总和。
例子:
Input: str = “125”
Output: 176
Explanation:
Inserting “+” after 1st index modifies str to “1+25” and value = 26
Inserting “+” after 2nd index modifies str to “12+5” and value = 17
Inserting “+” after both 1st and 2nd index modifies str to “1+2+5” and value = 8
Therefore, the total sum of all possible expression is 125 + 26 + 17 + 8 = 176
Input: str = “9999999999”
Output: 12656242944
方法:想法是以所有可能的方式在字符串的所有可能索引处插入“+”运算符并计算总和。最后,打印获得的总和。请按照以下步骤解决问题:
- 初始化一个变量,比如 sumOfExp ,通过在字符串的所有可能索引处插入“+”运算符来存储所有可能表达式的总和。
- 迭代生成所有可能的字符串索引子集。对于索引的每个子集,在子集的元素处插入“+”运算符,并将sumOfExp增加当前表达式的总和。
- 最后,打印sumOfExp的值。
下面是上述方法的实现:
Python3
# Python program to implement
# the above approach
# Function to find sum of all expressions by
# inserting '+' operator at all possible indices
def findSumOfExpressions(S, N):
# Stores sum of all expressions by inserting
# '+' operator at all possible indices
sumOfExp = 0
# Generate all possible subset
# of indices iteratively
for i in range(2 ** (N - 1)):
# Stores sum of
# current expressions
ans_sub = 0
# Stores numbers of
# current expressions
subst = S[0]
# Traverse the string at insert + at
# current subset of indices
for j in range(N - 1):
# If current index exists
# in the current subset
if (i >> j) & 1:
# Update ans_sub
ans_sub += int(subst)
# Update subst
subst = S[j + 1]
else:
# Update subst
subst += S[j + 1]
# + can't be inserted after
# the last index
if j == N - 2:
ans_sub += int(subst)
# Update ans
sumOfExp += ans_sub
# Base case
if N == 1:
print(int(S))
else:
# Print answer
print(sumOfExp)
# Driver Code
if __name__ == '__main__':
# Given string
S = "9999999999"
# Length of the string
N = len(S)
# Function call
findSumOfExpressions(S, N)
输出:
12656242944
时间复杂度: O(2 N * N)
辅助空间: O(1)