题解 | #和为S的连续正数序列#

和为S的连续正数序列

http://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe

回溯算法

class Solution {
public:
    void FindContinuousSequenceImpl(int sum, int curIdx, vector<int> &cur, int &curSum, vector<vector<int> > &result)
    {
        while (curSum > sum) {
            curSum -= cur[0];
            cur.erase(cur.begin());
        }

        if (curSum == sum) {
            result.push_back(cur);
            return;
        }    
        
        
        for (int i = curIdx; i <= sum - 1; i++) {
            cur.push_back(i);
            curSum += i;
            FindContinuousSequenceImpl(sum, i + 1, cur, curSum, result);
            if (cur.size() == 1) {
                // 走到这里时,正常情况cur应该有至少两个数,如果只有一个数了,说明前两个数相加已经大于sum,并且在第一步while循环中去掉第一个数了,
                // 之后再与新的数相加只会比这两个数和更大,不会再满足和为sum,已经遍历完毕
                return;
            } 
            curSum -= cur[0];
            cur.erase(cur.begin());
        }
    }
    
    vector<vector<int> > FindContinuousSequence(int sum) {
        vector<vector<int> > result;
        vector<int> cur;
        int curSum = 0;
        FindContinuousSequenceImpl(sum, 1, cur, curSum, result);
        
        return result;
    }
};
全部评论

相关推荐

Twilight_m...:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
下个早班:秒挂就是不缺人
点赞 评论 收藏
分享
ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务