1. 程式人生 > >[演算法學習]Java實現字串全排列

[演算法學習]Java實現字串全排列

思路:這裡用到遞迴的方式完成字元資料的全排列,遞迴確實很方便。看似沒用到輔助空間,實際上卻是消耗了棧空間(“遞迴棧”),遞迴用起來也不是那麼簡單,解決問題用遞迴的時候,一定要關注到兩個零界點,怎麼開始和怎麼結束。

程式碼

/**
 * 問題描述:輸入一個字串,打印出字串的全排列
 * 
 * @author kesar
 * 
 */
public class AllSeqArrange
{
    /**
     * test+遞迴
     * @param seq
     */
    public static void printAllSeq(String seq)
    {
        if
(seq == null || "".equals(seq)) { return; } char[] cs = seq.toCharArray(); printAllSeq(cs, 0, cs.length - 1); } /** * 解法:遞迴。遍歷每個字元交換到第一位,第一位的後面剩下字元進入遞迴,當無剩下字元可以進入遞迴時,列印輸出字元陣列。 * @param cs * @param start * @param end */ private
static void printAllSeq(char[] cs, int start, int end) { if (start > end) { System.out.println(cs); return; } for (int i = start; i <= end; i++) { exch(cs, start, i); printAllSeq(cs, start + 1, end); } } /** * 交換字元陣列中的兩個字元 * @param
cs * @param i * @param j */
private static void exch(char[] cs, int i, int j) { if (i == j) { return; } char temp = cs[i]; cs[i] = cs[j]; cs[j] = temp; } /** * @param args */ public static void main(String[] args) { printAllSeq("abcd"); } }

輸出

abc
acb
cab
cba
abc
acb 

相關推薦

[演算法學習]Java實現字串排列

思路:這裡用到遞迴的方式完成字元資料的全排列,遞迴確實很方便。看似沒用到輔助空間,實際上卻是消耗了棧空間(“遞迴棧”),遞迴用起來也不是那麼簡單,解決問題用遞迴的時候,一定要關注到兩個零界點,怎麼

【前端筆試】JavaScript實現字串排列

我個人認為前端工程師筆試題中,演算法題一般不難,也就這個難度,甚至比這還要簡單。這是我在筆試過程中遇到的一個題~下面分享一下解題思路。 大體結構:定義一個方法,傳入str變數,返回一個數組,包含所有排列: function fun(str){ v

字串排列演算法java實現

字串的全排列 遞迴方法實現要實現字串全排列 我覺得像是一種分治法的感覺。比如AB只有兩種 :AB BA到了ABC時可以抽出A 只看BC的話就是兩種,然後BC全排列之後放在A後面。隨後取出B對AC全排列放在B後面以此類推,此演算法非常精美 但是位數多了全排列數量會呈指數式增長。

Java實現字串排列總結

在劍指offer上刷題時遇到的題目: 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 本部落格參考:

字串排列組合的遞迴實現-Java

排列組合演算法用途廣泛, 需要掌握, 為降低門檻, 本文主要關注演算法的邏輯和簡易性, 未重視演算法效率. 結合網路書本上的實現和自己的需求, 這裡列有四個目標: 1. 所有元素的全排列: ab的全排列是ab, ba(順序相關); 2. 所有元素的全組合:

面試演算法學習-4-字串排列

題目描述 輸入一個字串,打印出該字串中字元的所有排列。 例如輸入字串abc,則輸出由字元a、b、c 所能排列出來的所有字串 abc、acb、bac、bca、cab 和 cba。 分析與解法 解法一、遞迴實現 從集合中依次選出每一個元素,作為排列的第一個元素,然後對剩餘的元素

從零開始學習演算法Java實現)~~~~之字串篇~~~判斷兩個字串是否是顛倒字母順序構成的

從今天開始記錄一下學習演算法的例程,貴在堅持! 寫出一個函式 anagram(s, t) 去判斷兩個字串是否是顛倒字母順序構成的 樣例    給出 s="abcd",t="dcab",返回 true 難都係數* 以下是java程式碼實現: public class So

字串排列 Java遞迴實現

思路:      字串的全排列和數字的全排列類似,舉個例子:字串為“ABC”,按照我們所學數學上的邏輯,先取出A,放入首位,剩下BC有兩種全排列情況,即ABC,ACB,同理,將A分別與B,C交換,於是字串"ABC"的全排列總共有6種。如何將這種邏輯轉換為程式碼:首先,可以肯定

排列演算法java實現

100題目之53題目和70題目 在做100題目的時候,全排列的演算法困擾了很久,雖然網上了搜了一些資料,可是並沒有搞懂。今天花了一個下午的時間,從新梳理了一遍,終於弄明白了。 全排列的演算法,遞迴分析網上都有: 設一組數p = {r1, r2, r3, ... ,

java實現有條件字串排列輸出

package edu.pku.ss.hlj; public class Hlj { public static void main(String[] args) { String s = "abcd";//這裡是要用到的所有陣列成的一個字串,其它字元同樣適

java字串排列實現方式

    今天突然之間想起了自己來易查面試時的一個筆試題目,題目大致如下:求字串s的全排列。     其實這個題目的實現方式也就是遞迴呼叫,當時也就寫了一下虛擬碼,今天就把完整的實現方式和大家分享下。     下面的實現方式也存在一些小BUG,比如:對於字串中出現相同的字元

深度優先演算法實現字母排列Java

使用Java實現對任意字母的全排列,例如: 在字母ABC中排列出全部答案。使用一般的for迴圈方法也可以解出題目,這裡面就ABC三個字母,使用for迴圈的話也只不過三個迴圈巢狀罷了,如果是ABCDEF

字串排列(效能分析Java版)

具體的思路我就不寫了,借用網上的一張圖來表示: 我的程式碼如下: import java.util.*; public class Solution { public ArrayList<String> Permutation(String str

【LeetCode-面試演算法經典-Java實現】【151-Reverse Words in a String(反轉字串中的單詞)】

原題   Given an input string, reverse the string word by word.   For example,   Given s = "the sky is blue",   return "bl

【LeetCode-面試演算法經典-Java實現】【003-Longest Substring Without Repeating Characters(最長非重複子字串)】

原題   Given a string, find the length of the longest substring without repeating characters. For

java字串排列問題(經典)

*原題如下:用1、2、2、3、4、6這六個數字,用java寫一個main函式,打印出所有不同的排列, *如:612234、412346等,要求:”4”不能在第三位,”3”與”6”不能相連. * *1把問題歸結為圖結構的遍歷問題。實際上6個數字就是六個結點,

java筆試題:用java實現字串壓縮演算法

題目:將字串 aaabcdda (可以從控制檯接收)程式設計實現將其轉換為 3a1b1c2d1a。 我的大致就這樣: System.out.print("請輸入一串字串:"); Scanner s = new Scanner(System.in); String str

js實現字元排列演算法

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>字元全排列</title> </head> <body>

演算法-字串排列問題

轉載地址:http://blog.csdn.net/hackbuteer1/article/details/7462447 全排列在筆試面試中很熱門,因為它難度適中,既可以考察遞迴實現,又能進一步考察非遞迴的實現,便於區分出考生的水平。所以在百度和迅雷的校園招聘以及程式設

機器學習入門演算法及其java實現-ID3(決策樹)演算法

ID3決策樹也是決策樹的一種,其作用在於根據已有資料訓練決策樹,並通過決策樹的分支實現對新資料的分類,是一種有監督的學習。 在生成決策樹的過程中,ID3使用的資訊熵增益對子節點類別進行確定。根據資訊熵越是有序的資料熵值越低,資訊熵增益越大表示當前屬性對於資料的