侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

剑指 Offer 57 - II. 和为s的连续正数序列

Hope
2022-04-11 / 0 评论 / 0 点赞 / 304 阅读 / 697 字
温馨提示:
本文最后更新于 2022-04-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

剑指 Offer 57 - II. 和为s的连续正数序列

思路:

dfs:
对于构成的连续序列,只需要枚举到target的一半上取整即可。
每次取path的最后一个元素,枚举这个元素 + 1是否符合
next + cnt <= target

代码:

class Solution {
public:
    vector<vector<int>> res;
    vector<int> path;
    vector<vector<int>> findContinuousSequence(int target) {
        for(int i = 1; i < (target + 1) / 2; i++){
            path.push_back(i);
            dfs(target,path,i);
            path.pop_back();
        }
        return res;
    }

    void dfs(int target,vector<int> & path,int cnt){
        if(cnt > target) return;
        if(cnt == target){
            res.push_back(path);
            //path.clear();
            return;
        }
        int next = path.back() + 1;
        if(next + cnt <= target){
            path.push_back(next);
            dfs(target,path,next + cnt);
            path.pop_back();
        }
    }
};

思路:

双指针
image.png

对于一个答案 i ~ j,在寻找下一个答案的时候,j' 一定是大于 j的,因为,对 i ~ j求和,答案是target ,那么当i增加到i' 时,j'一定大于j,否则对部分求和小于target.

代码:


0

评论区