《剑指offer》和为s的连续正数序列
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》和为s的连续正数序列
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目:小明很喜歡數(shù)學(xué),有一天他在做數(shù)學(xué)作業(yè)時(shí),要求計(jì)算出9~16的和,他馬上就寫出了正確答案是100。但是他并不滿足于此,他在想究竟有多少種連續(xù)的正數(shù)序列的和為100(至少包括兩個(gè)數(shù))。沒多久,他就得到另一組連續(xù)正數(shù)和為100的序列:18,19,20,21,22?,F(xiàn)在把問題交給你,你能不能也很快的找出所有和為S的連續(xù)正數(shù)序列? Good Luck!
輸出描述:
輸出所有和為S的連續(xù)正數(shù)序列。序列內(nèi)按照從小至大的順序,序列間按照開始數(shù)字從小到大的順序
解析:無需循環(huán)到和為sum為止,而是只需要循環(huán)到sum/2+1即可。滿足條件的序列添加進(jìn)list即可
import java.util.ArrayList; public class Solution {public ArrayList<ArrayList<Integer> > FindContinuousSequence(int sum) {ArrayList<ArrayList<Integer>> result = new ArrayList<>();for(int i=1;i<=(sum/2+1);i++){for(int j=i+1;j<=(sum/2+1);j++){//子序列累加int totalSum=sum(i,j);//子序列區(qū)間的和if(totalSum==sum){//子序列區(qū)間的和為sum,即滿足條件,可以到result了ArrayList<Integer> temp = new ArrayList<>();for(int m=i;m<=j;m++){temp.add(m);}result.add(temp);}if(totalSum>sum)//子序列的和都開始大于sum,無需在繼續(xù)下去,break跳出循環(huán)break;}}return result;}public int sum(int start,int end){//給子序列區(qū)間求和int sum=0;for(int i=start;i<=end;i++){sum+=i;}return sum;} }總結(jié)
以上是生活随笔為你收集整理的《剑指offer》和为s的连续正数序列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《剑指offer》像素翻转
- 下一篇: 《剑指offer》和为s的两个数字