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 };
  • 相关阅读:
    tp3.2和tp5的区别
    tp(调试模式,空操作,跨控制器调用,跨方法跳转--redirect(),框架语法,创建model模型)
    tp 连表查 分页 模糊查询
    thinkphp if和eq的区别
    js 面向对象例子
    JS字符串转换为JSON的四种方法笔记
    json在php中的使用之如何转换json为数组
    window.frames用法
    php js 数组排序
    控件常用
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6945803.html
Copyright © 2011-2022 走看看