剑指Offer(Java版)第三十二题:输入一个字符串,按字典序打印出该字符串中字符的所有排列。 例如输入字符串abc, 则打印出由字符a,b,c所能排列出来的 所有字符串abc,acb,bac,bc
Posted 桌子哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer(Java版)第三十二题:输入一个字符串,按字典序打印出该字符串中字符的所有排列。 例如输入字符串abc, 则打印出由字符a,b,c所能排列出来的 所有字符串abc,acb,bac,bc相关的知识,希望对你有一定的参考价值。
/*
输入一个字符串,按字典序打印出该字符串中字符的所有排列。
例如输入字符串abc,
则打印出由字符a,b,c所能排列出来的
所有字符串abc,acb,bac,bca,cab和cba。
*/
import java.util.*;
public class Class32 {
public ArrayList<String> printNewArray(String str){
ArrayList<String> result = new ArrayList<String>();
if(str == null || str.length() == 0){
return result;
}
if(str != null && str.length() > 0){
printNewArrayMain(str.toCharArray(),0,result);
Collections.sort(result);;
}
return result;
}
public void printNewArrayMain(char[] data, int i, ArrayList<String> list){
if(data == null || data.length == 0){
return;
}
if(i < 0 || i > data.length - 1){
return;
}
if(i == data.length - 1){
if(!list.contains(String.valueOf(data))){
list.add(String.valueOf(data));
}
}else{
for(int j = i; j < data.length; j++){
swap(data,i,j);
printNewArrayMain(data,i+1,list);
swap(data,i,j);
}
}
}
public void swap(char[] data, int i, int j){
char temp = data[i];
data[i] = data[j];
data[j] = temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
以上是关于剑指Offer(Java版)第三十二题:输入一个字符串,按字典序打印出该字符串中字符的所有排列。 例如输入字符串abc, 则打印出由字符a,b,c所能排列出来的 所有字符串abc,acb,bac,bc的主要内容,如果未能解决你的问题,请参考以下文章
剑指Offer(Java版)第三十五题:给一个数组,返回它的最大连续子序列的和
剑指Offer(Java版)第十二题:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动, 它每一次可以向左右上下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。 如