码农小汪-剑指Offer之25 -字符串的排列(全排列)
来源:互联网 发布:mac如何压缩文件 编辑:程序博客网 时间:2024/06/05 22:46
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
其实就是一个全排序,可能有重复的字母,需要不有重复的容器,我选择了hashset这个容器,应为我们的容器之间可以相互的转换的addAll就行啦。排序使用系统的函数。
我处理的时候,采用DFS深度遍历可能发现的所有的情况,这样我们就可以把所有的都查找到。然后就是输出啦!
DFS遍历的时候,应该注意出口,以及是否可以进行剪纸技术
代码
package JianzhiOffer;import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;public class Slution25 { public HashSet<String> result = new HashSet<>();// 不一样的 public Integer flag[];// 标记字段 public char steps[];// 每一步走过的情况 /** * DFS遍历所有的情况 * * @param str * @return */ public ArrayList<String> Permutation(String str) { ArrayList<String> list = new ArrayList<String>(); if (str == null || str.isEmpty()) { return list; } char arry[] = str.toCharArray(); flag = new Integer[arry.length]; steps = new char[arry.length]; for (int i = 0; i < flag.length; i++) { flag[i] = 0; } dfs(arry, 0); list.addAll(result);// 从其他集合中添加 Collections.sort(list);// 排序 return list; } /** * 遍历完我们的每一种可能,出口就是长度为length; 可能会出现重复的字母! * * @param array * @param step */ public void dfs(char[] array, int step) { if (step == array.length) { String str = ""; for (int i = 0; i < array.length; i++) { str += steps[i]; } result.add(str); return; } // 遍历每种可能 for (int i = 0; i < array.length; i++) { if (flag[i] == 0) {// 没有使用过 steps[step] = array[i];// 第几步,使用了当前的线程 flag[i] = 1; dfs(array, step + 1); // 走完最后一步,回来退一步 flag[i] = 0; } } } public static void main(String[] args) { Slution25 test = new Slution25(); System.out.println(test.Permutation("abcc").toString()); }}
0 0
- 码农小汪-剑指Offer之25 -字符串的排列(全排列)
- 剑指Offer------字符串的排列(全排列)
- 剑指offer:字符串的排列(字符串全排列)
- 剑指offer 之 字符串的全排列、全组合
- 剑指offer:字符串的全排列
- 剑指offer 28. 字符串的全排列
- 剑指Offer之 - 字符串的排列
- 【剑指offer】之字符串的排列
- 剑指offer(六十一)之字符串的排列
- 剑指offer之字符串字典序全排列
- (二十)剑指offer之字符串的排列
- 剑指offer 28字符串全排列
- 《剑指offer》:[28]字符串的全排列问题
- 剑指offer----字符串的全排列----java实现
- 【面试题】剑指Offer-28-字符串的全排列
- 剑指offer面试题28 字符串的全排列
- 剑指offer(29):字符串的排列
- 剑指offer(24)-字符串的排列
- [leetcode] 38. Count and Say
- 列表下拉刷新
- (OK) CentOS 7—adb—android-sdk_r24.3.3-linux.tgz
- Java高级部分之线程重点总结(上)
- 最近的javascrip学习心得及小心情
- 码农小汪-剑指Offer之25 -字符串的排列(全排列)
- CRT输入和输出(文件)
- 判断能否构成三角形 并输出三角形的周长和面积
- java集合Map,HashMap,TreeMap知识点总结
- WinDbg学习笔记(转)
- Android 动画之ScaleAnimation应用详解(缩放动画效果 )(转载)
- 禁用页面缓存的几种方法
- 配置Apache支持PHP(附Apache和PHP下载链接)
- 欢迎使用CSDN-markdown编辑器