java实现字符串的全排列

 更新时间:2018年02月05日 10:04:54   作者:snow_7  
这篇文章主要为大家详细介绍了java实现字符串的全排列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

字符串的全排列,具体内容如下

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

采用递归的思想:

把需要全排列的字符串分为两部分看待:
(1)字符串的第一个字符;
(2)第一个字符后面的所有字符;

求所有可能出现在第一个位置的字符;将第一个字符和后面的字符一次交换;

固定第一个字符,对第一个字符后面的所有字符求全排列。第一个字符后面的所有字符又可以分为两部分;

java代码: 

import java.util.ArrayList; 
import java.util.TreeSet; 
public class Solution { 
  public ArrayList<String> Permutation(String str) { 
    ArrayList<String> res = new ArrayList<String>(); 
    if(str==null||str.length()==0) 
    { 
      return res; 
    } 
    char[] charArray = str.toCharArray(); 
    //输出按照输入字典顺序 
    TreeSet<String> tempRes = new TreeSet<String>(); 
    PermutationCore(charArray,tempRes,0); 
    res.addAll(tempRes); 
    return res; 
     
  } 
  private void PermutationCore( char[] charArray,TreeSet<String> tempRes,int loc) 
  { 
    if(charArray==null || charArray.length==0 || loc<0 || loc>charArray.length-1) 
    { 
      return ; 
    } 
    if(loc==charArray.length-1) 
    { 
      tempRes.add(String.valueOf(charArray));//递归的出口 
    } 
    else 
    { 
      for(int i=loc;i<charArray.length;i++) 
      { 
        swap(charArray,i,loc);//将第一个字符与后面的字符交换 
        PermutationCore(charArray,tempRes,loc+1);//对后面所有的字符进行全排列 
        swap(charArray,i,loc);//再将之前交换的字符交换回来,以便第一个字符再与其他字符交换 
      } 
        
    } 
  } 
  private void swap(char[] charArray,int i,int j) 
  { 
    char temp = charArray[i]; 
    charArray[i] = charArray[j]; 
    charArray[j] = temp; 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解决IDEA JSP没有代码提示问题的几种方法

    解决IDEA JSP没有代码提示问题的几种方法

    这篇文章主要介绍了解决IDEA JSP没有代码提示问题的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Java实现非阻塞式服务器的示例代码

    Java实现非阻塞式服务器的示例代码

    这篇文章主要为大家详细介绍了如何利用Java实现一个简单的非阻塞式服务器,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
    2023-05-05
  • Struts2实现多文件上传功能

    Struts2实现多文件上传功能

    这篇文章主要为大家详细介绍了Struts2实现多文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 使用Java生成32位16进制密钥的代码实现

    使用Java生成32位16进制密钥的代码实现

    在许多加密和安全应用中,生成随机的密钥是至关重要的一步,密钥通常以16进制形式表示,并且具有特定的长度,在这篇博客中,我们将探讨如何使用Java生成一个32位长度的16进制密钥,并展示详细的代码示例和运行结果,需要的朋友可以参考下
    2024-08-08
  • Java线程三种命名方法详解

    Java线程三种命名方法详解

    这篇文章主要介绍了Java线程三种命名方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • TreeSet详解和使用示例_动力节点Java学院整理

    TreeSet详解和使用示例_动力节点Java学院整理

    TreeSet是一个有序的集合,它的作用是提供有序的Set集合。这篇文章主要介绍了TreeSet使用示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • springboot2.1.7整合thymeleaf代码实例

    springboot2.1.7整合thymeleaf代码实例

    这篇文章主要介绍了springboot2.1.7整合thymeleaf代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • SpringMVC中的handlerMappings对象用法

    SpringMVC中的handlerMappings对象用法

    这篇文章主要介绍了SpringMVC中的handlerMappings对象用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 模拟Ping操作的一个Java类

    模拟Ping操作的一个Java类

    这篇文章主要为大家详细介绍了一个模拟Ping操作的Java类,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • redis 使用lettuce 启动内存泄漏错误的解决方案

    redis 使用lettuce 启动内存泄漏错误的解决方案

    这篇文章主要介绍了redis 使用lettuce 启动内存泄漏错误的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论