lintcode 1814. 所有子数组之和

给定一个数组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);
    }
};
发布了330 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43981315/article/details/103882990