java實(shí)現(xiàn)字符串的全排列
字符串的全排列,具體內(nèi)容如下
輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所能排列出來的所有字符串a(chǎn)bc,acb,bac,bca,cab和cba。 結(jié)果請(qǐng)按字母順序輸出。
采用遞歸的思想:
把需要全排列的字符串分為兩部分看待:
(1)字符串的第一個(gè)字符;
(2)第一個(gè)字符后面的所有字符;
求所有可能出現(xiàn)在第一個(gè)位置的字符;將第一個(gè)字符和后面的字符一次交換;
固定第一個(gè)字符,對(duì)第一個(gè)字符后面的所有字符求全排列。第一個(gè)字符后面的所有字符又可以分為兩部分;
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);//將第一個(gè)字符與后面的字符交換
PermutationCore(charArray,tempRes,loc+1);//對(duì)后面所有的字符進(jìn)行全排列
swap(charArray,i,loc);//再將之前交換的字符交換回來,以便第一個(gè)字符再與其他字符交換
}
}
}
private void swap(char[] charArray,int i,int j)
{
char temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)非阻塞式服務(wù)器的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的非阻塞式服務(wù)器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下2023-05-05
使用Java生成32位16進(jìn)制密鑰的代碼實(shí)現(xiàn)
在許多加密和安全應(yīng)用中,生成隨機(jī)的密鑰是至關(guān)重要的一步,密鑰通常以16進(jìn)制形式表示,并且具有特定的長(zhǎng)度,在這篇博客中,我們將探討如何使用Java生成一個(gè)32位長(zhǎng)度的16進(jìn)制密鑰,并展示詳細(xì)的代碼示例和運(yùn)行結(jié)果,需要的朋友可以參考下2024-08-08
TreeSet詳解和使用示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
TreeSet是一個(gè)有序的集合,它的作用是提供有序的Set集合。這篇文章主要介紹了TreeSet使用示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
springboot2.1.7整合thymeleaf代碼實(shí)例
這篇文章主要介紹了springboot2.1.7整合thymeleaf代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
SpringMVC中的handlerMappings對(duì)象用法
這篇文章主要介紹了SpringMVC中的handlerMappings對(duì)象用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
redis 使用lettuce 啟動(dòng)內(nèi)存泄漏錯(cuò)誤的解決方案
這篇文章主要介紹了redis 使用lettuce 啟動(dòng)內(nèi)存泄漏錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04

