面试题57 - II. 和为s的连续正数序列(Leetcode每日一题-2020.03.06)

Problem

输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。

序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。

限制:1 <= target <= 10^5

Example1

输入:target = 9
输出:[[2,3,4],[4,5]]

Example2

输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]

Solution

2020-3-6 暴力回溯,此题应该还有更好的解法

class Solution {
public:
    vector<vector<int>> findContinuousSequence(int target) {

        vector<int> tmp;
        vector<vector<int>> ret;
        int curSum = 0;

        for(int i = 1;i <= target / 2;++i)
        {
            backtrack(i,target,curSum,tmp,ret);
        }

        return ret;

    }

    void backtrack(int curNum,int target,int &curSum,vector<int> &tmp,vector<vector<int>> &ret)
    {
        curSum += curNum;
        tmp.push_back(curNum);

        if(curSum >= target)
        {
            if(curSum == target)
                ret.push_back(tmp);
            tmp.pop_back();
            curSum -= curNum;
            return;
        }
        
        

        backtrack(curNum+1,target,curSum,tmp,ret);

        tmp.pop_back();
        curSum -= curNum;

    }
};
发布了496 篇原创文章 · 获赞 215 · 访问量 53万+

猜你喜欢

转载自blog.csdn.net/sjt091110317/article/details/104702379
今日推荐