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 };
  • 相关阅读:
    13.困难重重
    02.Django的第一个网页
    03.Django模板
    01.Web开发之简介
    14.效率利器之多线程和线程池
    Silverlight实用窍门系列:37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)
    Web编码规范中文乱码解决方案
    H*ber*ate Lazy属性
    Bat如何判断txt文本中第8行是否只有"符号,有则删除整行
    #每日一练 获取字典值
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6945803.html
Copyright © 2011-2022 走看看