• 剑指offer之【和为S的连续正数序列】


    题目:

      和为S的连续正数序列

    链接:

      https://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe?tpId=13&tqId=11194&rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    题目描述:

      小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 

      输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。

    思路:

      设置一个path变量,存放当前的数字序列,和一个csum代表当前序列的和,如果csum>sum 则去除小值,如果<sum, 增加大值,如果==sum则打印

    代码:

      

     1 class Solution {
     2 public:
     3     vector<vector<int>> FindContinuousSequence(int sum){
     4         if(sum <= 2){
     5             return res;
     6         }
     7         path = {1};
     8         int csum =1;
     9         for(int i = 2;i<= (sum+1)/2;++i){
    10             path.push_back(i);
    11             csum += i;
    12             if(csum == sum ){
    13                 res.push_back(path);
    14             }
    15             else{
    16                 while(csum>sum){
    17                     csum -= path[0];
    18                     path.erase(path.begin());
    19                 }
    20                 if(csum == sum){
    21                     res.push_back(path);
    22                 }
    23             }
    24         }
    25         return res;
    26     }
    27 private:
    28     vector<vector<int>> res;
    29     vector<int> path;
    30 };
  • 相关阅读:
    [netty] netty中的定时机制HashedWheelTimer 规格严格
    c和c++开发工具之clion和vs
    编译python(cpython)的源码及其用途
    python缩进tab和空格互转
    c和c++编译器之gcc和mingw
    DotLiquid(.net模版引擎)
    微信公众号自定义菜单的一些思考我为什么做公众号自定义菜单
    Owner项目步骤
    xx系统分析说明书
    项目经理养成计划
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6945803.html
Copyright © 2020-2023  润新知