1. 程式人生 > >劍指Offer.38 字串全排列(包含重複)

劍指Offer.38 字串全排列(包含重複)

題目給定字串“abca”輸出其全部排列。

分析:

package 劍指Offer;

import java.util.ArrayList;
import java.util.List;

public class 劍指38_字串全排列 {
    public static void main(String[] args) {
        String s="abca";
        for(String ss:Permutation(s)){
            System.out.println(ss);
        }
        System.out.println(Permutation(s).size());
    }
    public static List<String> Permutation(String s){
        List<String> list=new ArrayList <>();
        if(s==null||s.length()==0) return list;

        Permutation(list,s.toCharArray(),0);
        return list;
    }
    public static void Permutation(List<String> list,char [] chs,int index){
        if(index==chs.length){

            list.add(asString(chs));
        }else{
            for(int i=index;i<chs.length;i++){

                //用來表示之前是否有i位置相同的出現過
               if(isSwap(chs,index,i)){
                    //交換,即要交換的兩個字元不相等
                    char temp=chs[i];
                    chs[i]=chs[index];
                    chs[index]=temp;

                    Permutation(list,chs,index+1);

                    temp=chs[i];
                    chs[i]=chs[index];
                    chs[index]=temp;
                }

            }
        }
    }
    //字串全排列核心(需要判斷當前位置和需要交換的位置是否存在相同的,如果存在相同的,則表示已經換過了,這個位置就不用再換了)
    public static  boolean isSwap(char [] chs,int index,int i){
        for(int j=index;j<i;j++){
            if(chs[j]==chs[i]){
                return false;
            }
        }
        return true;
    }

    public static String asString(char [] chs){
        StringBuilder sb = new StringBuilder();
        for(char c:chs){
            sb.append(c);
        }
        return sb.toString();

    }


}

相關推薦

Offer.38 字串排列包含重複

題目給定字串“abca”輸出其全部排列。分析:package 劍指Offer; import java.util.ArrayList; import java.util.List; public c

Offer字串排列

題目描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字

offer-字串排列重複

一、問題描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 結果請按字母順序輸出。  輸入描述: 輸入一個字串,長度不超過9(可能有字元重複),字元只包

[offer] --27.字串排列

題目描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述: 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 import java.

【python資料結構與演算法】【offer字串排列

題目描述: 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba,且要求輸出字串按序排列,不可重複   思路: 其實排列問題的思路很簡單,有點類似《劍指offer

offer——27.字串排列

題目描述: 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述:輸入一個

offer字串排列

 題目描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述: 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 class

Offer字串排列

輸入一個字串,打印出該字串中字元的所有排列。例如輸入字串“abc”,則打印出由a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab和cba。 我們解這題時可以將字串劃分為兩部分:首字元和後面的所有字元。 首先求所有可能出現在第一個位置的字元

offer》——字串排列

T: 題目描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 結果請按字母順序輸出。 輸入描述: 輸

offer字串排列與組合

【1、字串排列】 【題目】 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

offer】Java版程式碼完整版

一、引言 《劍指offer》可謂是程式猿面試的神書了,在面試中幫了我很多,大部分面試的演算法題都會遇到原題或者是類似的題。但是書上的程式碼都是C版的,我在這裡整理了一份Java版的程式碼供大家學習參考,這些程式碼我都是在OJ上跑過全AC的,所以正確性你大可放心

offer之變態跳臺階Java實現

變態跳臺階 NowCoder 題目描述: 一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。 ###解題思路: 關於本題,前提是n個臺階會有一次n階的跳法。分析如下: f(1) = 1 f(2)

offer字串排列

題目描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 注意有可能重

offer字串排列

輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述: 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 class Solution { public:    

offer 38 數字在排序數組中出現的次數

++ exit false ast stk div number size cto 自己的寫法 class Solution { public: int GetNumberOfK(vector<int> data ,int k) { i

offer:樹的子結構Python

題目描述 輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構) # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x #

offer程式設計題python實現第2題替換空格

題目:替換空格 題目描述: 請實現一個函式,將一個字串中的每個空格替換成“%20”。 例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 python實現思路: 本題的實現思路很多,首先python中提供了很多處理字串的方法,替換字串直接

offer程式設計題python實現第16題合併兩個排序的連結串列

劍指offer程式設計題python實現(第16題)合併兩個排序的連結串列 題目描述 輸入兩個單調遞增的連結串列, 輸出兩個連結串列合成後的連結串列, 當然我們需要合成後的連結串列滿足單調不減規則。 '''題目描述 輸入兩個單調遞增的連結串列, 輸出兩個連結串列合成後的連結串列, 當然我們需

offer——正則表示式匹配遞迴呼叫

當模式中的第二個字元不是“*”時: 1、如果字串第一個字元和模式中的第一個字元相匹配,那麼字串和模式都後移一個字元,然後匹配剩餘的。 2、如果 字串第一個字元和模式中的第一個字元相不匹配,直接返回false。 而當模式中的第二個字元是“*”時: 如果字串第一個字元跟模式第一個字元

offer:(38知識遷移 :數字在排序陣列中出現的次數

統計一個數字在排序陣列中出現的次數。 思路:排序陣列一定要想到二分法查詢       package co.com.jianzhioffer; import java.io.ObjectInputStream.GetField; public class