国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

遞歸--打印一個(gè)字符串的全部排列(java)

這篇具有很好參考價(jià)值的文章主要介紹了遞歸--打印一個(gè)字符串的全部排列(java)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

打印一個(gè)字符串的全部排列

自負(fù)串全排序:
舉例:
abc 的全排序是:
abc
acb
bac
bca
cba
cab

解題思路

因?yàn)槊總€(gè)字符都要選,其實(shí)就是選擇每個(gè)字符的順序,那我們遞歸時(shí),就可以把不同順序一直遞歸下去.

代碼演示

    /**
     * 字符串的全排列
     * @param str
     * @return
     */
    public static List<String> allSubSequence(String str){
        if (str == null || str.equals("")){
            return null;
        }
        //保存答案
        ArrayList<String> ans = new ArrayList<>();
        process(str.toCharArray(),0,ans);
        return ans;
    }

    /**
     * 遞歸
     * @param str 字符串?dāng)?shù)組
     * @param index  下標(biāo)值
     * @param ans 保存答案
     */
    public static void process(char[]str, int index, List<String> ans){
        //base case
        if (index == str.length){
            ans.add(String.valueOf(str));
        }else{
            for (int i = index;i < str.length;i++){
                //因?yàn)槊總€(gè)字符都要選,我們只是選擇順序,因此交換下順序,
                swap(str,i, index);
                //然后遞歸
                process(str,index + 1,ans);
                //要把交換過的順序 恢復(fù)回去,這樣才能保證遞歸出全部順序.
                swap(str,i,index);
            }
        }
    }

打印一個(gè)字符串的全部排列,要求不要出現(xiàn)重復(fù)的排列

解題思路:
我們可以按上面的代碼去做,只需要用HashSet 去保存答案,就會(huì)去重了,但這樣并沒有優(yōu)化效率,在遞歸時(shí)去掉可能會(huì)重復(fù)的值,這樣才能把效率優(yōu)化下來,
怎樣優(yōu)化呢:
兩個(gè)相同的字符,如果已經(jīng)有一個(gè)出現(xiàn)過在某個(gè)位置,那么剩下相同的字符也不用重復(fù)交換了,這樣會(huì)提高效率
根據(jù)上面的思路,我們只需要加個(gè)判斷,
因?yàn)樽址D(zhuǎn)換成數(shù)字的值在0-255 ,因此用長(zhǎng)度256 的數(shù)組就可以標(biāo)記了,代碼演示,

代碼演示,

    /**
     * 打印一個(gè)字符串的全部排列,要求不要出現(xiàn)重復(fù)的排列
     * @param str
     * @return
     */
    public static List<String> allSubSequence2(String str){
        if (str == null || str.equals("")){
            return null;
        }
        ArrayList<String> ans = new ArrayList<>();
        process2(str.toCharArray(),0,ans);
        return ans;
    }

    /**
     * 遞歸
     * @param str
     * @param index
     * @param ans
     */
    public static void process2(char[]str, int index, List<String> ans){
        if (index == str.length){
            ans.add(String.valueOf(str));
        }else{
            //標(biāo)記相同的字符是否交換過,
            boolean[] flag = new boolean[256];
            for (int i = index;i < str.length;i++){
                if (!flag[str[i]]){
                    flag[str[i]] = true;
                    swap(str,i, index);
                    process(str,index + 1,ans);
                    swap(str,i,index);
                }

            }
        }
    }

遞歸專題

遞歸–字符串的全部子序列和不重復(fù)的子序列(java)

遞歸–漢諾塔問題(java)文章來源地址http://www.zghlxwxcb.cn/news/detail-461974.html

到了這里,關(guān)于遞歸--打印一個(gè)字符串的全部排列(java)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java判斷一個(gè)字符串是否包含某個(gè)字符串

    Java判斷一個(gè)字符串是否包含某個(gè)字符串

    開發(fā)過程中,有時(shí)會(huì)判斷一個(gè)字符串是否包含某個(gè)字符串的操作,這里總結(jié)判斷方法。 方式一:contains()方法 ? ? ? ? 理解:contains() 方法用于判斷字符串中是否包含指定的字符或字符串。(判斷一個(gè)字符串是否包含某個(gè)字符串) ? ? ? ? 語法:public boolean contains(CharSequence

    2024年02月13日
    瀏覽(43)
  • java獲取字符串最后一個(gè)字符

    要獲取字符串的最后一個(gè)字符,你可以使用以下方法之一: 方法1:使用 charAt() 方法 方法2:使用 substring() 方法 在這兩種方法中,我們使用 str.length() - 1 來獲取字符串的最后一個(gè)字符的索引,然后使用 charAt() 方法 或?qū)⒆詈笠粋€(gè)字符作為子字符串使用 substring() 方法。 請(qǐng)注意

    2024年02月03日
    瀏覽(34)
  • 獲取字符串的全排列(去除字符串中2個(gè)字符相同時(shí)造成的重復(fù))

    一、概念 現(xiàn)有一個(gè)字符串,要打印出該字符串中字符的全排列。 以字符串a(chǎn)bc為例,輸出的結(jié)果為:abc、acb、bac、bca、cab、cba。 以字符串a(chǎn)ab為例,輸出的結(jié)果為:aab、aba、baa。 二、代碼 致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等編程技術(shù)的技巧經(jīng)驗(yàn)分

    2024年04月16日
    瀏覽(22)
  • C++將字符串中包含指定字符串范圍內(nèi)的字符串全部替換

    將指定字符串所在的范圍之內(nèi)的字符串全部替換為指定的字符串。如: 源字符串: 轉(zhuǎn)換后的字符串: 或者轉(zhuǎn)換為: 本文就是記錄一種將上述字符串替換成功的方法。其中轉(zhuǎn)換之后的第一個(gè)字符串,實(shí)際上是將原有字符串中 “$START$” 和 “$END$” 替換為 “” (空字符串);

    2024年02月07日
    瀏覽(23)
  • Java判斷一個(gè)字符串是否包含某個(gè)字符

    Java判斷一個(gè)字符串是否包含某個(gè)字符

    1 問題 如何利用Java通過不同的方法來判斷一個(gè)字符串是否包含某個(gè)字符。 2 方法 .contains方法 這個(gè)是利用java.lang.String.contains()?方法返回true,當(dāng)且僅當(dāng)此字符串包含指定的char值序列,此方法返回true,如果此字符串包含,否則返回false。 (2).indexOf方法 這一個(gè)是利用java.lang.Str

    2024年02月16日
    瀏覽(112)
  • 【Java】Java去掉字符串最后一個(gè)逗號(hào)的方法

    Java中去掉字符串最后一個(gè)逗號(hào)的方法有很多種,其中最簡(jiǎn)單的一種是使用substring方法。具體的方法是:先找到字符串中最后一個(gè)逗號(hào)的位置,然后使用substring方法截取逗號(hào)前的部分。 這樣就可以把字符串末尾的逗號(hào)去掉了,輸出結(jié)果為:a,b,c。 需要注意的是,這種方法只能

    2024年02月03日
    瀏覽(65)
  • [開發(fā)|java] 將一個(gè)Java字符串按逗號(hào)分割成一個(gè)列表(List)

    可以使用Java的 split() 方法將字符串分割成字符串?dāng)?shù)組,然后將數(shù)組轉(zhuǎn)換為列表。以下是一個(gè)示例代碼: 輸出 在上述代碼中,我們使用 split(\\\",\\\") 方法將字符串 str 按逗號(hào)分割成一個(gè)字符串?dāng)?shù)組,然后使用 Arrays.asList() 方法將數(shù)組轉(zhuǎn)換為列表。最后,我們打印輸出列表的內(nèi)容。

    2024年02月16日
    瀏覽(96)
  • Java中如何獲取一個(gè)字符串是什么類型

    Java中如何獲取一個(gè)字符串是什么類型

    在Java中,您可以使用一些方法來確定一個(gè)字符串的類型。下面是一些常用的方法: 使用正則表達(dá)式:您可以使用正則表達(dá)式來匹配字符串是否符合特定的模式或格式,以確定其類型。例如,使用matches()方法可以檢查字符串是否匹配某個(gè)特定的正則表達(dá)式模式。 使用內(nèi)置方法

    2024年02月09日
    瀏覽(24)
  • (搜索) 劍指 Offer 38. 字符串的排列 ——【Leetcode每日一題】

    (搜索) 劍指 Offer 38. 字符串的排列 ——【Leetcode每日一題】

    難度:中等 輸入一個(gè)字符串,打印出該字符串中字符的所有排列。 你可以以任意順序返回這個(gè)字符串?dāng)?shù)組,但里面 不能有重復(fù)元素 。 示例: 輸入:s = “abc” 輸出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”] 限制 : 1 = s 的長(zhǎng)度 = 8 ??思路:回溯 可以直接 暴力窮舉 ,但

    2024年02月12日
    瀏覽(29)
  • 31 對(duì)集合中的字符串,按照長(zhǎng)度降序排列

    31 對(duì)集合中的字符串,按照長(zhǎng)度降序排列

    ? ? ? ? 思路:使用集合的sort方法,新建一個(gè)Comparator接口,泛型是String,重寫里面的compare方法。 ? ? ? ? 運(yùn)行結(jié)果: ? ? ? ? ?擴(kuò)充:點(diǎn)擊Comparator,查看接口內(nèi)部:發(fā)現(xiàn)加了@FunctionalInterface,說明可以使用箭頭函數(shù),直接使用箭頭函數(shù)就能表示Comparator接口以及它的compara

    2024年02月14日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包