字符串全排列

输入“abc" 输出:abc acb bac bca cab cba

package offer;

public class zifuchuan {
static void swap(char[] c,int a,int b){
    char temp;
    temp=c[a];
    c[a]=c[b];
    c[b]=temp;

}

static int is_swap(char[]c ,int start,int k){
    int flag=1;
    for(int i=start;i<k;i++){
        if(c[i]==c[k]){
            flag=0;
            break;
        }
    }
    return flag;

}
static void digui(char a[],int begin,int end){
    int k;
    int j;
    if(begin==end){
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]);
        }
    }
    else{
        for(k=begin;k<end;k++){
            if(is_swap(a,begin,k)==1){
                swap(a,k,begin);
                digui(a,begin+1,end);
                swap(a,k,begin);

            }

        }
    }
}
    public static void main(String[] args) {
// TODO Auto-generated method stub
  String str="abc";
  char []a=str.toCharArray();
  int i,len;
  digui(a,0,a.length);

    }

}
时间: 2024-08-01 20:22:17

字符串全排列的相关文章

字符串全排列 java实现

经常会遇到字符串全排列的问题.例如:输入为{'a','b','c'},则其全排列组合为abc,acb,bac,bca,cba,cab.对于输入长度为n的字符串数组,全排列组合为n!种. package Bayes; public class RecursionTree { public static void permutation(char[] s,int from,int to) { if(to<=1) { return; } if(from ==to) { System.out.print

PHP字符串全排列算法

<?php /** * PHP字符串全排列算法 */ $results = []; $arr = []; function bfs($start) { global $arr; global $results; $queue = []; array_push($queue, $start); while( !empty($queue) ) { $cur = array_shift($queue); if(strlen($cur) === count($arr)) { array_push($re

字符串全排列和组合算法

打印字符串的全排列 算法的思路: 把一个字符串分成两部分,第一个字符+后面部分所有的字符.这样就能够递归的求解整个过程了: 1.每个字符都做一次首字符 2.当某个字符作为首字符的时候,求后面所有字符的全排列 而这里的求后面所有字符的全排列可以看成递归的子问题 全排列的递归树: 但是这里还有一个问题,那就是字符串中有重复的字符时,这样的算法会增加最后的结果数目.比如说字符串aab,a+ab的全排列,然后交换还是a+ab的全排列.所以会增加结果的数目.解决方案就是:当遇到重复的字符的时候就跳过去,不

字符串全排列-非递归算法

字符串的全排列非递归算法是每次都寻找比前序列大一点的序列,如: 起点:字典序最小的排列,例如12345 终点:字典序最大的排列,例如54321 过程:从当前排列生成字典序刚好比它大的下一个排列. 算法过程:后找.小大.交换.翻转 后找:字符串中最后一个升序的位置i,即S[k]>S[k+1](k>i),S[i]<S[i+1]: 查找(小大):S[i+1...N-1]中比Ai大的最小值Sj: 交换:Si,Sj: 翻转:S[i+1...N-1] 代码如下: 1 #include <ios

递归写出字符串全排列

给出一个字符串,例如“abc”,输出它的全排列及“abc”,"acb","bac","bca","cab","cba". 递归的方法: 核心思想:交换. 全排列(“abc”)=a.全排列(“bc”)+b.全排列("ac")+c.全排列(“ab”),其中a.全排列(“bc”)=ab.全排列(“c”)+ac.全排列(“b”)=abc+acb void swap(char *p, char *

字符串全排列问题

问题:输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 解决思路:第一遍将第一个字母固定,遍历所有字母,与第一个字母交换位置,然后固定下一个字母,与其后的所有字母依次交换位置,直到固定最后一个字母. 字符串的全排列是一个概率问题,排除相同字母造成的影响,比如abc的全排列个数为A33 = 6

有重复字符串全排列

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. import java.util.*; public class Solution { public static ArrayList<String> Permutation(String str) { if(str == null) return null; ArrayList<String> l

获取字符串全排列 或者 只输出k个的组合

已知长度为n的字符串,获取所有可能的全排序 n! def test(arr): length = len(arr) if length<=1: return arr res = [] for i in range(length): temp = list.copy(arr) del(temp[i]) res += [arr[i]+j for j in test(temp)] return res print(test(['a','b','c','d'])) result: G:\python\s

字符串全排列的递归实现

#include "stdafx.h" #include <iostream> #include <assert.h> using namespace std; void permutation(char *pStr, char* pBegin) { assert(pStr&&pBegin); if (*pBegin == '\0') cout << pStr << endl; else { for (char* pCh

26.字符串全排列

输入一个字符串,按字典序打印出该字符串中字符的所有排列. 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba 了解大概,深扣细节: 对于一个字符串例如abcd: 定第一位为a,遍历后面的组合,bc,bd,cd 定位第一位为b,(交换a,b)遍历组合ac…… import java.util.ArrayList; import java.util.List; import java.util.Collections; public