剑指offer系列—T28字符串的排列
2016-07-16 11:50
357 查看
本人对java语言更熟悉,所以剑指offer代码都是通过Java实现,且涉及的核心代码全部通过牛客网的测试用例检查,感谢牛客网为我检验程序提供了极大帮助!main函数是为了在自己运行程序时,运行结果更直观化。
import java.util.ArrayList;
/**
* @author xhl
* 字符串的排列
* 题目描述
* 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,
* 则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结
* 果请按字母顺序输出。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:考察全排列,在博客《剑指offer系列-T12_1全排列》已经描述,不过此题
需要考虑有重复元素的情况。
*
*/
public class offerT28 {
/**
* @param args
*/
ArrayList<String> list = new ArrayList<String>();
public void Permutation1(char[] chararray, int index) {
if (index == chararray.length - 1) {
list.add(String.valueOf(chararray));
} else {
for (int i = index; i < chararray.length; i++) {
if (i != index && chararray[index] == chararray[i])//判断是否有相等的元素,相等则不用再交换顺序,因为效果和不交换一样
continue;
else {
swap(chararray, i, index);
Permutation1(chararray, index + 1);
swap(chararray, i, index);
}
}
}
}
public ArrayList<String> Permutation(String str) {
Permutation1(str.toCharArray(), 0);
return list;
}
void swap(char[] a, int i, int j) {
char temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
offerT28 o = new offerT28();
String str = "abc";
ArrayList<String> list = o.Permutation(str);
System.out.print(list);
}
}
import java.util.ArrayList;
/**
* @author xhl
* 字符串的排列
* 题目描述
* 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,
* 则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结
* 果请按字母顺序输出。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路:考察全排列,在博客《剑指offer系列-T12_1全排列》已经描述,不过此题
需要考虑有重复元素的情况。
*
*/
public class offerT28 {
/**
* @param args
*/
ArrayList<String> list = new ArrayList<String>();
public void Permutation1(char[] chararray, int index) {
if (index == chararray.length - 1) {
list.add(String.valueOf(chararray));
} else {
for (int i = index; i < chararray.length; i++) {
if (i != index && chararray[index] == chararray[i])//判断是否有相等的元素,相等则不用再交换顺序,因为效果和不交换一样
continue;
else {
swap(chararray, i, index);
Permutation1(chararray, index + 1);
swap(chararray, i, index);
}
}
}
}
public ArrayList<String> Permutation(String str) {
Permutation1(str.toCharArray(), 0);
return list;
}
void swap(char[] a, int i, int j) {
char temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
offerT28 o = new offerT28();
String str = "abc";
ArrayList<String> list = o.Permutation(str);
System.out.print(list);
}
}
相关文章推荐
- 2016/07/16 《jquery仿新浪微博新版搜索下拉特效》学习笔记一
- extjs的理解
- 重写javascript的Array.prototype.push方法实现类似java.util.set添加不重复元素
- jquery弹出可关闭遮罩提示框
- jQuery获取URL请求参数的方法
- 修改jquery.validate.js计算中文字符长度的规则。
- 【web前端开发】浏览器兼容性处理大全
- HTML5 协议 WebSocket 教程
- 表格行列高亮显示的实现(二)
- jQuery 即点即改
- bootstrap初级
- bzoj 1592 [Usaco2008 Feb]Making the Grade 路面修整
- jquary学习之路--1
- MVC学习系列6--使用Ajax加载分部视图和Json格式的数据
- 菜鸟必看css学习小技巧怎么实现三角形
- js闭包剖析
- JavaScript:实现鼠标的悬停及移出事件
- JS的DOM操作
- 初涉HTML(3)
- javascript深入理解js闭包