给定一个数组nums, 你需要返回这个数组所有子数组之和。
样例
示例1:
输入: nums = [1, 2, 3]
输出: 20
解释: {1} + {2} + {3} + {2 + 3} + {1 + 2} + {1 + 2 + 3} = 20
示例2
输入: [1, 2]
输出: 6
解释: {1} + {2} + {1, 2} = 6
注意事项
如果nums = [2, 4, 1], 数组所有的子集是 {[2], [4], [1], [2, 4], [4, 1], [2, 4, 1]}
保证返回的结果是int的类型
思路:递归算法,用sum保存每个子数组的的和,res为sum的总和,从而得到所有子数组之和
class Solution {
public:
/**
* @param nums: a Integer list
* @return: return the sum of subarrays
*/
int SubArraySum(vector<int> &nums) {
// write your code here
int res=0;
int sum=0;
for (int i = 0; i < nums.size(); i++) {
/* code */
recursion(nums,res,i,sum);
}
return res;
}
void recursion(vector<int> &nums,int &res,int index,int sum)
{
if(index>=nums.size()) return;
sum+=nums[index];
res+=sum;
recursion(nums,res,index+1,sum);
}
};