给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 print-all-combinations-of-given-length

时间:2023-03-09 19:07:28
给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 print-all-combinations-of-given-length

// 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合

/*

Input:

set[] = {'a', 'b'}, k = 3

Output:

aaa

aab

aba

abb

baa

bab

bba

bbb

Input:

set[] = {'a', 'b', 'c', 'd'}, k = 1

Output:

a

b

c

d

package recursion;

import java.util.ArrayList;

public class N_sets_form_length_k_string {

	// 给出一个set的字符和一个正数k,求全部由这个set能组成长度为k的字符串集合
/*
Input:
set[] = {'a', 'b'}, k = 3 Output:
aaa
aab
aba
abb
baa
bab
bba
bbb Input:
set[] = {'a', 'b', 'c', 'd'}, k = 1
Output:
a
b
c
d */
public static void main(String[] args) {
ArrayList<Character> set = new ArrayList<Character>();
set.add('a');
set.add('b'); int k = 3;
ArrayList<String> al = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
rec(set, k, al, sb); System.out.println(al);
} // 观察到选定第一个字符后,问题就转化为k-1的递归问题。而set中的每个元素都能充当第一个字符。 // 结束条件就是k为0时。
public static void rec(ArrayList<Character> set, int k, ArrayList<String> al, StringBuilder sb){
if(k == 0) {
al.add(new String(sb));
return;
} for(int i=0; i<set.size(); i++) {
sb.append(set.get(i));
rec(set, k-1, al, sb);
sb.deleteCharAt(sb.length()-1); // 善用StringBuilder来删除最后一个字符
}
} }

http://www.geeksforgeeks.org/print-all-combinations-of-given-length/

版权声明:本文博客原创文章。博客,未经同意,不得转载。