くみあわせもんだい

3681 ワード

くみあわせもんだい
タイトル
例えば、3文字a、b、cを入力すると、それらの組み合わせはa b c ab ac bc abcである.
コード実装
    //        001   111 
    //0     1   
    public static List<String> solve(char[] s) {
        if(s == null || s.length == 0)
            return null;
        int len = s.length;
        int n = 1 << len;
        List<String> ls = new ArrayList<>();
        for(int i = 1; i < n; i++) {

            StringBuilder sb = new StringBuilder();
            for(int j = 0; j < len; j++) {
                if((i & (1 << j)) != 0) {
                    sb.append(s[j]);
                }
            }
            ls.add(sb.toString());
        }
        return ls;
    }

タイトル
Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
コード#コード#
public class Solution {
   //  1:n    i,   {i+1: n}    k-1 combination  。
   public List<List<Integer>> combine(int n, int k) {

        if(n <= 0 || k <= 0 || k > n)
            return null;
        List<Integer> com = new ArrayList<>();
        List<List<Integer>> allCom = new ArrayList<>();

        findCom(n, 1, k, com, allCom);
        return allCom;


    }
    public void findCom(int n, int start, int k, List<Integer> com, List<List<Integer>> allCom) {

        if(k == 0) {
            allCom.add(new ArrayList<>(com));
            //    
            return ;
        }

        for(int i = start; i <= n-k+1; i++) {
            com.add(i);
            findCom(n, i + 1, k - 1, com, allCom);
            com.remove(com.size() - 1);
        }
    }
}