zoukankan      html  css  js  c++  java
  • 剑指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 };
  • 相关阅读:
    ural(Timus) 1019 Line Painting
    ACMICPC Live Archive 2031 Dance Dance Revolution
    poj 3321 Apple Tree
    其他OJ 树型DP 选课
    poj 3548 Restoring the digits
    ACMICPC Live Archive 3031 Cable TV Network
    递归循环获取指定节点下面的所有子节点
    手动触发asp.net页面验证控件事件
    子级Repeater获取父级Repeater绑定项的值
    没有列名的数据绑定
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6945803.html
Copyright © 2011-2022 走看看