Java递归基础案例-字符串全排列-三星提示(背下公式)

举报
红目香薰 发表于 2022/02/07 22:44:38 2022/02/07
【摘要】 题目解析 从字符串数组中每次选取一个元素,作为结果中的第一个元素;然后,对剩余的元素全排列 全排列 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。 公式:全排列数f(n)=n!(定义0!=1) 例如:如果是对任意的三个字符进行全排列...

题目解析

从字符串数组中每次选取一个元素,作为结果中的第一个元素;然后,对剩余的元素全排列

全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

公式:全排列数f(n)=n!(定义0!=1)

例如:如果是对任意的三个字符进行全排列,也就是3!=6,当然,如果是相同的就只有1次

String s="我爱你";
 

三个字符,全排列,6中结果

我爱你
我你爱
爱我你
爱你我
你爱我
你我爱

三个相同字符串,就一次

爱爱爱

那么我们要编辑出这种排列方法:


  
  1. package Action;
  2. public class test {
  3. public static void main(String[] args) {
  4. String s = "我爱你";
  5. char[] array = s.toCharArray();
  6. int count=0;
  7. //"字符串不能完全相同"判断
  8. for (int i = 0; i < array.length-1; i++) {
  9. if(array[i]==array[i+1]) {
  10. count++;
  11. }
  12. }
  13. if(count==array.length-1) {
  14. System.out.println(s);
  15. return;
  16. }
  17. // 通过字符处理
  18. f(s.toCharArray(), 0, s.length() - 1);
  19. }
  20. public static void f(char[] s, int from, int to) {
  21. if (from == to) {//递归终止条件
  22. System.out.println(s);//打印结果
  23. } else {
  24. // 从from开始,循环到to结束
  25. for (int i = from; i <= to; i++) {
  26. change(s, i, from); //交换前缀,作为结果中的第一个元素,然后对剩余的元素全排列
  27. f(s, from + 1, to); //递归调用,缩小问题的规模,form每次+1
  28. change(s, from, i); //换回前缀,复原字符数组
  29. }
  30. }
  31. }
  32. /**
  33. * 用于交换的
  34. *
  35. * @param s
  36. * @param from
  37. * @param to
  38. */
  39. public static void change(char[] s, int from, int to) {
  40. char temp = s[from];// 定义第三方temp,获取from
  41. s[from] = s[to];// 从to交换到from
  42. s[to] = temp;// 从temp还给to
  43. }
  44. }

这个理解难度也就大了。 

希望大家一定要好好看完啊,并且真正的去练习个十几二十遍的,最好背下来这个用法。

文章来源: laoshifu.blog.csdn.net,作者:红目香薰,版权归原作者所有,如需转载,请联系作者。

原文链接:laoshifu.blog.csdn.net/article/details/122795895

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。