字符串的排列与组合

在做编程题时经常遇到字符串的排列与组合问题,特此总结一下
1.字符的全排列(无重复字符)

/** * 字符串的全排列,无重复字符 * @param list 字符数组 * @param n 当前交换的位置(初始为0) */ public static void permute(char[] list,int n){ if(n==list.length){ for(int i=0; i

2.字符的全排列(含重复字符)
/** * 字符串的全排列(含重复字符) * @param list 字符数组 * @param n 当前交换的位置(初始为0) */ public static void permute(char[] list,int n){ if(n==list.length){ for(int i=0; i

【字符串的排列与组合】3.字符的组合(无重复字符)
public class Test { //存储字符 static ArrayList stack = new ArrayList<>(); public static void main(String[] args) { String str = "1234"; for(int i=0; i=m||n<0) return; //添加第一个字符 stack.add(list[start]); if(n==0) System.out.println(stack); combine(list, start+1, m, n-1); //没有添加第一个字符 stack.remove(stack.size()-1); combine(list, start+1, m, n); } }

4.字符组合(含重复字符)
public class Test { static StringBuilder sb = new StringBuilder(); static ArrayList ans = new ArrayList<>(); public static void main(String[] args) { String str = "1223"; for(int i=0; i=m||n<0) return; //添加第一个字符 sb.append(list[start]); if(n==0){ String str = sb.toString(); if(!ans.contains(str)) ans.add(str); } combine(list, start+1, m, n-1); //没有添加第一个字符 sb.deleteCharAt(sb.length()-1); combine(list, start+1, m, n); } }


    推荐阅读