アルゴリズムは、配列中の要素とある数を求めます。


1、もっと簡単なテーマ:全部でn個の数を判断して、1-nから、その中の一つとSの一つのシーケンスを探し出します。
このテーマは一つのウィンドウを維持するために、もしウィンドウの中の数がSより小さいなら、Sより大きいなら、左の数を削除します。
import java.util.ArrayList;
public class Solution {
   public ArrayList> FindContinuousSequence(int sum) {
        ArrayList> listAll = new ArrayList<>();
        for (int i = (int) Math.sqrt(sum * 2); i >= 2; i--) {
            if (((i & 1) == 1 && sum % i == 0) || (sum % i) * 2 == i) {
                ArrayList list = new ArrayList<>();
                for (int j = 0, k = (sum / i) - (i-1)/ 2; j< i; j++, k++) {
                    list.add(k);
                }
                listAll.add(list);
            }
        }
        return listAll;
    }
}
2、配列の要素は任意の要素であり、配列の中でSに結合できるすべてのシーケンスを判断し、数字が違っても、下付きが同じでも計算します。
import java.util.*;

/**
 * @Author: yd
 * @Date: 2018/9/9 15:52
 * @Version 1.0
 */


class Main {
    private int count;//         
    private int TARGET_SUM;//       
    private int addAll = 0;//               
    private List list = new ArrayList<>();

    public static void main(String[] args) {
        new Main().getInfo();

    }

    private void getInfo() {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        TARGET_SUM = m;//    
        int[] array = new int[n];
        for (int i = 0; i < n; i++) {
            array[i] = sc.nextInt();
        }
        getAll(array, 0, array.length);
        System.out.println(count);

    }

    /**
     *         
     *
     * @param array           
     * @param fromIndex      
     * @param endIndex       
     * @return     
     */
    public void getAll(final int[] array, int fromIndex, int endIndex) {

        if (addAll >= TARGET_SUM) {//                  
            if (addAll == TARGET_SUM) {
                count++;
            }
            return;//         ,                 
        }

        for (int i = fromIndex; i < endIndex; i++) {
            if (addAll + array[i] <= TARGET_SUM) {
                list.add(array[i]);
                addAll += array[i];
                getAll(array, i + 1, endIndex);
                addAll -= list.remove(list.size() - 1);
            }
        }
    }


}