JZ41 Sumは正の数の連続したシーケンスです

タイトル説明

Xiao Mingは数学がとても好きです。ある日、数学の宿題をしているときに、9から16の合計を計算するように頼みました。正しい答えは100だとすぐに書きました。しかし、彼はこれに満足しておらず、連続する正のシーケンスの合計が100(少なくとも2つの数値を含む)となるのは何だろうと考えています。彼が合計100の連続した正の数のシーケンスを取得するのにそれほど時間はかかりませんでした:18、19、20、21、22。質問はあなたにお任せしますが、合計がSであるすべての連続したポジティブシーケンスをすぐに見つけることができますか?幸運を祈ります!

出力の説明:

合計がSであるすべての連続する正の数を出力します。シーケンス内で最小から最大までシーケンスに従い、シーケンス間で最小から最大までの開始番号に従います

import java.util.ArrayList;
public class Solution {
    
    
        public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) {
    
    
        ArrayList<Integer> list = new ArrayList();
        ArrayList<ArrayList<Integer>> ans = new ArrayList();
        int l = 1;
        int r = 2;
        list.add(1);
        list.add(2);
        while (l < ((sum+1)/2)){
    
    

            while (listsum(l,r) < sum){
    
    
                r++;
                list.add(r);
            }
            while (listsum(l,r) > sum){
    
    
                l++;
                list.remove(0);
            }
            if (listsum(l,r) == sum) {
    
    
                ans.add(new ArrayList<>(list));
                l++;
                list.remove(0);
            }
        }
        return ans;
    }
    private int listsum(int l,int r){
    
    
        return (l+r)*(r-l+1)/2;
    }
}

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_41620020/article/details/108567626