タイトル説明
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;
}
}