くみあわせもんだい
3681 ワード
くみあわせもんだい
タイトル
例えば、3文字a、b、cを入力すると、それらの組み合わせはa b c ab ac bc abcである.
コード実装
タイトル
Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
コード#コード#
タイトル
例えば、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);
}
}
}