牛客网 | 字符串的排列
来源:互联网 发布:mac拷贝照片到u盘 编辑:程序博客网 时间:2024/05/22 09:49
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
对于一个n 位的字符串来讲,它是n-1位字符串的排列 加上 没有在 n -1 位字符串里 那个字符 的排列。 有点难理解,用例子说明:
对于字符串ABC来讲,它所有的排列就是 A + BC 的排列 加上 B + AC 的排列,再加上 C + AB的排列。
而BC的排列是 B + C 的排列 加上 C + B 的排列。
所以,对一个字符串,我们从中去一个值,然后求剩余部分的排列,然后把它们再组合在一起。
import java.util.ArrayList;import java.util.Collections;public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String> list = new ArrayList<>(); if (str == null || str.length() == 0) { return list; } per(str.toCharArray(),0,str.length(),list); Collections.sort(list); return list; } public void per(char[] str,int start,int size,ArrayList<String> list) { if(start == size) list.add(new String(str)); else { for (int i = start; i < size; i++) { if(i!=start&&str[i]==str[start]) continue; else { swap(str, i, start); per(str,start+1,size,list); swap(str,start,i); } } } } public void swap(char[] str,int index1,int index2) { if(index1!=index2) { char temp = str[index1]; str[index1] = str[index2]; str[index2] = temp; } }}
0 0
- 牛客网 | 字符串的排列
- 【牛客网】字符串的排列
- 字符串的排列_牛客网
- 字符串的全排列
- 字符串的全排列
- 转载 字符串的排列
- 字符串的排列--总结
- 字符串的排列
- 字符串的全排列
- 字符串的排列
- 53.字符串的排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的全排列
- 字符串的排列
- 字符串的排列
- 字符串的排列
- Android UI中的一些小问题
- ubuntu下查看占用某端口的程序或进程
- 关于AnimationSet无法循环的小结
- javaWeb乱码问题
- 解决Ubuntu 10.04 睡眠后不能唤醒的问题
- 牛客网 | 字符串的排列
- UITableView
- 异常怎么记录
- [从零开始学libGDX]第二章:libgdx环境的搭建-Windows篇
- The Ordered List Abstract Data Type
- UINavigationController
- Thoughtworks笔试
- Eclipse和PyDev搭建完美Python开发环境(Windows篇)
- 数据源(数据库连接池的简易实现)