【剑指offer28:字符串的排列】【java】
生活随笔
收集整理的這篇文章主要介紹了
【剑指offer28:字符串的排列】【java】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目:輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所能排列出來的所有字符串a(chǎn)bc,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++){//如果碰到相同的字母,則不做交換,跳過本次循環(huán)(首字母除外,會有一次交換)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);}} }這里有一個地方很奇怪,如果是做遞歸交換的話,每次交換完之后會恢復(fù)原樣,那么對于abc來說,最后兩個應(yīng)該是cab和cba的順序,為何牛客網(wǎng)測試給出了相反的順序?是否有人可以回答一下~
?
轉(zhuǎn)載于:https://www.cnblogs.com/fay0926/p/8482240.html
總結(jié)
以上是生活随笔為你收集整理的【剑指offer28:字符串的排列】【java】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SOURCE15PHEcolumn是什么
- 下一篇: howcouldibeahomophob