首页 > 代码库 > 给出一个set的字符和一个正数k,求所有由这个set能组成长度为k的字符串集合 print-all-combinations-of-given-length
给出一个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/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。