博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php实现字符串的排列(交换)(递归考虑所有情况)
阅读量:5337 次
发布时间:2019-06-15

本文共 1771 字,大约阅读时间需要 5 分钟。

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
Permutation(String str) {12         List
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
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 }

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/9091034.html

你可能感兴趣的文章
Mysql 5.6 新特性(转载)
查看>>
Jenkins强制设置语言为中文
查看>>
子串的替换
查看>>
linux中常用的60个命令及作用详解
查看>>
poj 1664放苹果(递归)
查看>>
CDN、浏览器缓存
查看>>
Python+opencv图像识别
查看>>
字节流VS缓冲流
查看>>
也谈用友被面试经历【去年杭州用友被拒】
查看>>
伴随开发人员成长的问题:工程重要,还是算法重要?细节重要,还是架构重要?...
查看>>
GTK添加事件
查看>>
linux----tail 过滤日志文件中的关键字
查看>>
图论最短路径例题
查看>>
C#设计模式——适配器模式(Adapter Pattern)
查看>>
計蒜客/小教官(xjb)
查看>>
Linux文件和目录
查看>>
Faster_RCNN 2.模型准备(上)
查看>>
ANDROID 2.0游戏开发实战宝典pdf
查看>>
《Android 4高级编程(第3版)》(完整书签).pdf
查看>>
pku 2195 Going Home 最小费最大流问题
查看>>