题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

import java.util.ArrayList;
import java.util.Arrays;/*** Created by Fay on 2018/2/26.*/
public class leetcode28 {ArrayList<String> list = new ArrayList<String>();public ArrayList<String> Permutation(String str) {if(str == null){return null;}char[] arr = str.toCharArray();recursionArrange(arr,0,arr.length-1);return list;}public void recursionArrange(char[] arr ,int start, int end){if(start == end){String str = String.valueOf(arr);list.add(str);}else{for(int i=start; i<=end; i++){//如果碰到相同的字母,则不做交换,跳过本次循环(首字母除外,会有一次交换)if(i!=start && arr[start]==arr[i]){continue;}else{swap(arr, i, start);recursionArrange(arr, start+1, end);swap(arr, i ,start);}}}}public void swap(char[] arr,int m,int n){char temp = arr[m];arr[m] = arr[n];arr[n] = temp;}public static void main(String args[]){leetcode28 test = new leetcode28();ArrayList<String> list = test.Permutation("aba");for(String str:list){System.out.println(str);}}
}

这里有一个地方很奇怪,如果是做递归交换的话,每次交换完之后会恢复原样,那么对于abc来说,最后两个应该是cab和cba的顺序,为何牛客网测试给出了相反的顺序?是否有人可以回答一下~

转载于:https://www.cnblogs.com/fay0926/p/8482240.html

【剑指offer28:字符串的排列】【java】相关推荐

  1. [230516 剑指38] 字符串的排列

    [230516 剑指38] 字符串的排列 一 题目 剑指 Offer 38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. ...

  2. 剑指Offer_27_字符串的排列

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 结果请按字母顺 ...

  3. 《LeetCode力扣练习》剑指 Offer 05. 替换空格 Java

    <LeetCode力扣练习>剑指 Offer 05. 替换空格 Java 一.资源 题目: 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输 ...

  4. 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java

    <LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...

  5. 剑指offer编程题(JAVA实现)——第35题:数组中的逆序对

    github https://github.com/JasonZhangCauc/JZOffer 剑指offer编程题(JAVA实现)--第35题:数组中的逆序对 题目描述 在数组中的两个数字,如果前 ...

  6. 剑指offer编程题(JAVA实现)——第38题:二叉树的深度

    github https://github.com/JasonZhangCauc/JZOffer 剑指offer编程题(JAVA实现)--第38题:二叉树的深度 题目描述 输入一棵二叉树,求该树的深度 ...

  7. 剑指Offer——编程题的Java实现(更新完毕……)

    目录 二维数组中的查找 替换空格 从尾到头打印链表 重建二叉树 用两个栈实现队列 用两个队列实现一个栈 旋转数组的最小数字 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖 二进制中1的个数 数值的整数次方 ...

  8. 剑指offer 66道题目java实现全部代码

    个人博客:小景哥哥 包含剑指offer全部题目,有题目描述,注释,个别题目有解题思路,还有一题多解等. 在这里提供给大家,供大家参考,欢迎大家提出不足和意见,目前在牛客网都是100%AC的. pack ...

  9. 剑指Offer——编程题的Java实现

    声明:我写这个的意图是我在看书的过程中,就我掌握的内容做一个笔记,没有抄袭的意图.再次说明一下,我找工作的过程中并不顺利,没有像那些牛人们拿到一大把的Offer,我只是希望通过我自己的努力,不断提高自 ...

  10. 三天刷完《剑指OFFER编程题》--Java版本实现(第三天)

    正在更新中......... 剑指offer --Python版本的实现: 剑指offer(1/3)第一大部分 剑指offer(2/3)第二大部分 剑指offer(3/3)第三大部分 -------- ...

最新文章

  1. Python基础08 面向对象的基本概念
  2. 循环链表应用——约瑟夫置换
  3. BestCoder Round #85
  4. Intent打开各种类型的文件
  5. java 反射用法_Java 反射的概念与使用
  6. opencv16-Sobel算子
  7. HTTP请求中的请求字段
  8. Java-IO流-实例
  9. linux下mail函数,Linux主机禁用Mail函数的解决办法
  10. swoft使用redis
  11. Java学习电子书大全
  12. BlackBerry模拟器中文转换
  13. bochs上网镜像怎么上网_【bochs win10镜像可上网版】bochs win10镜像img下载 完整版-趣致软件园...
  14. 数字孪生-输电铁塔及线路的结冰、融化
  15. CPU 性能优化的几个思路
  16. 【超简便的Python】 提取两个列表的共同元素
  17. 计算机格式怎么调,怎么改电脑硬盘格式?
  18. Unity3d资源反编译. AssetBundle格式简析+简单应用+爬坑
  19. 教你快速制作一个简单的网页
  20. JavaScript 有趣的冷知识:tagged template literals

热门文章

  1. STM32F 103C8T6开发板 点亮LED灯
  2. C++ Time类重载运算符
  3. matlab泰勒图,matlab画泰勒图
  4. async python两个_【Python】python中实现多进程与多线程
  5. 062_判断用户输入的是 Yes 或 NO
  6. WinForm -- 为TextBox文本框添加鼠标右键菜单
  7. linux centos6.5 网络配置
  8. 解决ajax获取不到按钮的id
  9. Java 如何有效地避免OOM:善于利用软引用和弱引用
  10. POJ C++程序设计 编程题#4:计算整数平方和