剑指Offer:字符串排列【38】
2024-08-31 03:23:34
剑指Offer:字符串排列【38】
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
题目分析
Java题解
package str;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator; public class StrPermutation { public static ArrayList<String> Permutation(String str) {
if(str==null)
return new ArrayList<>();
ArrayList<String> list = new ArrayList<>();
PermutationCore(str.toCharArray(),0,list);
ArrayList<String> newList = new ArrayList<>();//去除重复元素,比如aa这种,按我们的方式有aa,aa,但是实质结果只有一个aa
Iterator<String> it = list.iterator();
while (it.hasNext())
{
String temp = it.next();
if(!newList.contains(temp))
newList.add(temp);
}
Collections.sort(newList);//字典序排序
return newList;
} public static void main(String[] args) { ArrayList<String> list= Permutation("abc");
Iterator<String> it = list.iterator();
while (it.hasNext())
System.out.println(it.next());
} public static void PermutationCore(char[] str,int ptr,ArrayList<String> res) {
//递归的结束条件
if(ptr==str.length)
{
res.add(new String(str));
return;
}
//循环部分
for(int i = ptr;i<str.length;i++)
{
Swap(str,ptr,i);
PermutationCore(str,ptr+1,res);
Swap(str,ptr,i);
}
} //交换
public static void Swap(char[] str,int i,int j)
{
char temp = str[i];
str[i] = str[j];
str[j] = temp;
} }
最新文章
- AVAudioPlayer播放并实现了后台播放和远程控制
- java lambda表达式学习笔记
- Nginx安装注意事项
- MYSQL 查询出最大/最小值所在的记录
- pyinstaller--将py文件转化成exe
- openssl安装
- Android Xfermode 实战 实现圆形、圆角图片
- CPU内存管理和linux内存分页机制
- jsoncpp第二篇------API
- HDU2008
- 自己动手写泛型dao
- Nginx的介绍以及编译安装详解
- spring mvc配置datasource数据源的三种方式
- RPC 原理
- 使用 Python 在 Linux 上实现一键回归测试
- 旺店通erp系统
- PAT天梯:L1-019. 谁先倒
- 国内一元钱 正常搭建android开发环境
- 共享内存shm*(生产者和消费者)
- HDU 4952 Poor Mitsui(贪心)