美文网首页
字符串全排列-循环递归

字符串全排列-循环递归

作者: crishawy | 来源:发表于2019-02-28 20:03 被阅读0次

题目描述

输入一串字符串,输出该字符串所有的排列,并且无重复。
例如,输入:“abc”,输出:abc、acb、bac、bca、cab、cba

解决思路

正常思维,先固定一字母,求之后字母的全排列,该问题可划分为更小的子问题,直到所求子问题规模为0,输出结果。显然,使用递归的思路求解,下图为递归的过程:


image.png

递归具有两个基本特征:递归终止条件与递归式

  • 递归终止条件:当所求全排列问题规模为0,即字符串长度为0
  • 递归式:将所有全排列字符串的第一个字符依次与后面字符交换,然后递归进入下一层,递归返回时,还原交换

代码实现

package lanqiao.practise;

import java.util.Scanner;

public class Permutation {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //input a string ,output the permutation using recursive
        Scanner s = new Scanner(System.in);
        String string = s.nextLine();
        char[] a = string.toCharArray();
        permutation(a,a.length);
    }
    
    public static void permutation(char[] a,int n) {
        if(a.length == 0)
            return ;
        else {
            permutate(a,0,n);
        }
    }
    
    public static void permutate(char[] a,int k,int n) {
        if(k==n) {
            System.out.println(a);
            return ;
        }
        for(int i=k;i<n;i++) {
            //to prevent the repeated string, we could add a judgement
            if(i!=k&&a[i] == a[k])
                continue;
            swap(a,k,i);
            permutate(a,k+1,n);
            swap(a,k,i);
        }
    }
    public static void swap(char[] a,int i,int j) {
        char temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

}

相关文章

  • 算法复习之字符串(1)

    (1)字符串循环左移 | 字符串全排列(递归,非递归)《本节内容》(2)KMP算法| BF算法(3 字符串的最...

  • 关于数组的一些操作【python】

    递归的应用:求输入字符串的全排列 求输入字符串的全排列递归完成,也可以直接使用库函数 结果展示: ————————...

  • 字符串全排列-循环递归

    题目描述 输入一串字符串,输出该字符串所有的排列,并且无重复。例如,输入:“abc”,输出:abc、acb、bac...

  • 字符串全排列问题

    今天学习了字符串全排列问题的递归与非递归实现,其中,递归实现是把递归放在循环中,到现在我也没看懂到底是个什么样的过...

  • P254-字符串的排列

    排列总结: 字符串的全排列和组合算法 1.递归实现 2.非递归实现 qsort函数、sort函数 (精心整理篇) ...

  • 全排列与字典序

    全排列 递归实现全排列; 首先来说递归算法实现全排列: 例如,对于{1,2,3,4}的例子进行全排列,其可以分解...

  • 机试常用算法和题型-递归专题

    递归专题 递归加上图形按规律打印 另一种方向的递归 循环递归+全排列 求组合数递归 递归组合+判断素数,一加一减显...

  • 字典序排列

    字符串的全排列,普通递归如下: 详细的解析:http://blog.csdn.net/randyjiawenjie...

  • 全排列 嵌套循环转递归

    全排列给定一个数字列表,返回其所有可能的排列。 样例给出一个列表[1,2,3],其全排列为: [[1,2,3],[...

  • 全排列

    对几个数进行全排列,如1,2,3进行全排列。可以采用递归加循环的方式.一次排列的结束就输出一次。else中的for...

网友评论

      本文标题:字符串全排列-循环递归

      本文链接:https://www.haomeiwen.com/subject/cznkuqtx.html