字符串的全排列问题
来源:互联网 发布:c语言三大应用领域 编辑:程序博客网 时间:2024/05/20 08:43
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
方法一:
注意点:
第一个是重复字母,第二个是按字典顺序。
重复字母我们在进行交换的时候直接跳过就可以了,按字典顺序,这个就需要我们进行排列了。
思路
这个题不会做,还是以例子:abc的形式来讲解此算法思路:
第一步:abc———->将第一个字符与自己本身还与其他的字符进行交换后得到abc、bac、cba。注:用一for循环即可实现。
第二步:在第一步每种情况的基础上,保持第一个字符不变,求剩余几位的排列。以bac为例:保持第一位不变,剩余两位ac的排列为:ac、ca(注:发现与第一步一样,因此用递归来实现)。直到保存到只剩下一个字符没有交换后加上前面的不变的字符作为输出结果,为:bac、bca。
package JianZhiOffer;
import java.util.Scanner;
public class Permutation
{
public static void main(String[] args) {
String str = "";
Scanner scan = new Scanner(System.in);
str = scan.nextLine();
permutation(str.toCharArray(), 0);
}
public static void permutation(char[] str, int i) {
if (i >= str.length)
return;
if (i == str.length - 1) {
System.out.println(String.valueOf(str));
} else {
for (int j = i; j < str.length; j++) {
char temp = str[j];
str[j] = str[i];
str[i] = temp;
permutation(str, i + 1);
temp = str[j];
str[j] = str[i];
str[i] = temp;
}
}
}
}
输入:abcd
输出:
abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
方法2:
package JianZhiOffer;
public class Permutation1
{
public static void main(String args[])
{
Permutation1 testPermutation=new Permutation1();
testPermutation.permutation("abcd");
}
public void permutation(String str)
{
int count=0;
if(str==null)
return;
char[] chs=str.toCharArray(); int point=0;
System.out.print(chs);
System.out.print(" ");
count++; char temp1=chs[point];
chs[point]=chs[++point]; chs[point]=temp1;
while(!String.valueOf(chs).equals(str)){
System.out.print(chs);
System.out.print(" ");
count++; if(point==chs.length-1){ char temp=chs[point]; chs[point]=chs[0];
chs[0]=temp; point=0;
}else{ char temp=chs[point]; chs[point]=chs[++point]; chs[point]=temp;
}
}
System.out.println(count);
}
}
输入:abcd 输出:abcd bacd bcad bcda acdb cadb cdab cdba adbc dabc dbac dbca 12
不过,方法2的输出结果不是按照字典顺序的,且不是全排列结果。
- 字符串的全排列问题
- 字符串的全排列问题
- 字符串的全排列问题
- 字符串的全排列问题
- 字符串的全排列问题
- 字符串全排列问题
- 字符串全排列问题
- 字符串全排列问题
- 字符串全排列问题
- 字符串全排列问题
- 字符串全排列问题
- 字符串全排列问题
- 字符串全排列问题
- 字符串全排列问题
- 字符串全排列问题
- 字符串的全排列问题的解决方法
- 字符串、数组的全排列问题
- 字符串的全排列
- virtualbox ubuntu 17 设置静态ip
- 交换基础知识
- 【IO流】ObjectOutputStream,ObjectInputStream 对象的读写
- Java实现-装最多水的容器
- mysql可重复读的思考
- 字符串的全排列问题
- shell中函数的使用
- redis学习笔记
- 【DP】TEST20170511
- 基数排序
- java基础零碎练手<一>
- Python网络爬虫与信息提取(中国大学mooc)
- 基于Arduino的GPS数据解析程序
- java.util.Date cannot be cast to java.sql.Date 将date类型的数据存入数据库