字符串的排列与组合
在做编程题时经常遇到字符串的排列与组合问题,特此总结一下
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);
}
}
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量