剑指offer 和为S的连续正数序列
2016-05-03 19:07
393 查看
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) { if (sum < 3) { return new ArrayList<>(); } ArrayList<ArrayList<Integer>> res = new ArrayList<>(); int small = 1; int big = 2; int mid = (1 + sum) / 2; int curSum = small + big; while (small < mid) { if (sum == curSum) { res.add(getConSeq(small,big)); } while (curSum > sum && small < mid) { curSum -= small; ++small; if (curSum == sum) { res.add(getConSeq(small,big)); } } ++big; curSum += big; } return res; } public ArrayList<Integer> getConSeq(int small, int big) { ArrayList<Integer> seq = new ArrayList<>(); for (int i = small; i <= big; i++) { seq.add(i); } return seq; }
相关文章推荐
- CSS3之 3D变换、3D动画
- 简单的jquery表情插件
- CSS3:媒体查询
- 5、Javascript的函数名加括号和不加括号的区别
- 关于对JSR标准的理解
- JS不间断横向滚动实现代码
- phantomjs#3系统模块
- web day23 AJAX,XStream,JSON
- jQuery学习之jQuery Ajax用法详解
- 如何判断图片(img)是否已经加载成功--基于react
- JavaScript创建对象的几种方式
- 使用KnockoutJs+Bootstrap实现分页
- 身份证号 js验证 validform
- 使用bufferevent进行libevent服务端和客户端的开发
- JavaScript全局变量和局部变量的使用注意点
- 关于从后台传来的json数据,使用jquery动态展现所有的item,给每个item添加删除功能
- Bootstrap入门九:辅助类
- css行高line-height的一些深入理解及应用
- JavaScript将函数赋值给变量的易错点
- javascript进阶(一)— — 已阅文章收藏