zoukankan      html  css  js  c++  java
  • php实现字符串的排列(交换)(递归考虑所有情况)

    php实现字符串的排列(交换)(递归考虑所有情况)

    一、总结

    交换: 当有abc的时候,分别拿第一位和其它位交换,第一位固定,余下的位做递归,这样有考虑到所有情况,因为第一位只可能是所有的字母,那第一位依次和所有的位交换可以保证所有的位都可以出现在第一位,如果交换的时候要交换的字母和第一位字母相同,则不必交换

    二、php实现字符串的排列

    题目描述

    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

    输入描述:

    输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

    三、代码

    如果字母不重复的话直接回溯解排列组合很好做

    字母重复的话:可以交换字母的位置来得到所有情况

    基于回溯法思想:当有abc的时候,分别拿第一位和其它位交换,第一位固定,余下的位做递归,这样有考虑到所有情况,因为第一位只可能是所有的字母,那第一位依次和所有的位交换可以保证所有的位都可以出现在第一位,如果交换的时候要交换的字母和第一位字母相同,则不必交换

    代码一:java

     1 import java.util.List;
     2 import java.util.Collections;
     3 import java.util.ArrayList;
     4  
     5 public class Solution {
     6     public static void main(String[] args) {
     7         Solution p = new Solution();
     8         System.out.println(p.Permutation("abc").toString());
     9     }
    10  
    11     public ArrayList<String> Permutation(String str) {
    12         List<String> res = new ArrayList<>();
    13         if (str != null && str.length() > 0) {
    14             PermutationHelper(str.toCharArray(), 0, res);
    15             Collections.sort(res);
    16         }
    17         return (ArrayList)res;
    18     }
    19  
    20     public void PermutationHelper(char[] cs, int i, List<String> list) {
    21         if (i == cs.length - 1) {
    22             String val = String.valueOf(cs);
    23             if (!list.contains(val))
    24                 list.add(val);
    25         } else {
    26             for (int j = i; j < cs.length; j++) {
    27                 swap(cs, i, j);
    28                 PermutationHelper(cs, i+1, list);
    29                 swap(cs, i, j);
    30             }
    31         }
    32     }
    33  
    34     public void swap(char[] cs, int i, int j) {
    35         char temp = cs[i];
    36         cs[i] = cs[j];
    37         cs[j] = temp;
    38     }
    39 }
  • 相关阅读:
    一个2013届毕业生(踏上IT行业)的迷茫(2)
    一个2013届毕业生(踏上IT行业)的迷茫(1)
    Java 开源博客——B3log Solo 0.6.5 正式版发布了!
    Java 开源博客——B3log Solo 0.6.5 正式版发布了!
    在CSDN博客中添加量子恒道统计功能的做法
    Struts2——(8)struts2中文件的上传
    Struts2——(7)拦截器组件
    让富文本编辑器支持复制doc中多张图片直接粘贴上传
    ASP net 上传整个文件夹
    js文件夹上传
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9091034.html
Copyright © 2011-2022 走看看