leetcode中的递归调用总结

来源:互联网 发布:kali源码安装ss 编辑:程序博客网 时间:2024/06/16 23:32

只是总结我在刷leetcode过程中遇到的使用递归来解决的问题


437. Path Sum III

You are given a binary tree in which each node contains an integer value.

Find the number of paths that sum to a given value.

The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).

The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000

root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8      10     /  \    5   -3   / \    \  3   2   11 / \   \3  -2   1Return 3. The paths that sum to 8 are:1.  5 -> 32.  5 -> 2 -> 13. -3 -> 11

代码:


class Solution {public:    int pathSum(TreeNode* root, int sum) {        if(!root) return 0;        return sumUp(root, 0, sum) + pathSum(root->left, sum) + pathSum(root->right, sum);    }private:    int sumUp(TreeNode* root, int pre, int& sum){        if(!root) return 0;        int current = pre + root->val;        return (current == sum) + sumUp(root->left, current, sum) + sumUp(root->right, current, sum);    }};

78. Subsets


Given a set of distinct integers, nums, return all possible subsets.

Note: The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,3], a solution is:

[  [3],  [1],  [2],  [1,2,3],  [1,3],  [2,3],  [1,2],  []]

class Solution {public:    vector<vector<int>> subsets(vector<int>& nums) {        sort(nums.begin(), nums.end());        vector<vector<int>> subs;        vector<int> sub;          genSubsets(nums, 0, sub, subs);        return subs;     }    void genSubsets(vector<int>& nums, int start, vector<int>& sub, vector<vector<int>>& subs) {        subs.push_back(sub);        for (int i = start; i < nums.size(); i++) {            sub.push_back(nums[i]);            genSubsets(nums, i + 1, sub, subs);            sub.pop_back();        }    }};


原创粉丝点击