java实现递归实现string xyz排序

先用上面的一张图说明逻辑,这就是递归的逻辑。

xy排序就相当于在x的空位插上y,x只有两个空位,y插前面得带yx,y插后面得到xy

xyz排序就相当于在xy排序的所有结果插上z,结果如图

代码实现如下

        public static void main(String[] args){
		List<String> list = sort("xy","k");
		for(String s:list){
			System.out.println(s);
		}
	}
	public static List<String> sort(String main,String insert){
		List<String> result  = new ArrayList<>();
		if(main.length() == 1){
			result.add(main+insert);
			result.add(insert+main);
		}else{
			List<String> lastResult = sort(main.substring(0,main.length()-1),main.substring(main.length()-1));
			for(String s:lastResult){
				int insertIndex = 0;
				while(insertIndex<=s.length()){
					if(insertIndex == 0){
						result.add(insert+s);
					}else if(insertIndex == s.length()){
						result.add(s+insert);
					}else{
						result.add(s.substring(0, insertIndex)+insert+s.substring(insertIndex, s.length()));
					}
					insertIndex++;
				}
			}
		}
		return result;
	};

测试结果是:zxy;xzy;xyz;zyx;yzx;yxz;

另外测试abcd排序结果是:dcab;cdab;cadb;cabd;dacb;adcb;acdb;acbd;dabc;adbc;abdc;abcd;dcba;cdba;cbda;cbad;dbca;bdca;bcda;bcad;dbac;bdac;badc;bacd;

时间: 2024-09-30 15:02:51

java实现递归实现string xyz排序的相关文章

【Java必修课】一图说尽排序,一文细说Sorting(Array、List、Stream的排序)

# 简说排序 排序是极其常见的使用场景,因为在生活中就有很多这样的实例.国家GDP排名.奥运奖牌排名.明星粉丝排名等,各大排行榜,给人的既是动力,也是压力. 而讲到排序,就会有各种排序算法和相关实现,本文不讲任何排序算法,而只专注于讲使用.通过实例给大家展示,我们可以了解怎样使用既有的工具进行排序.Linux之父说: > Talk is cheap. show me the code! 本文JDK版本为Java 8,但并不代表所介绍到的所有方法只能在JDK1.8上跑,部分方法在之前的版本就已经给

[Java] HashMap、TreeMap、Hashtable排序

Java中对Map(HashMap,TreeMap,Hashtable等)的排序时间 首先简单说一下他们之间的区别: HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null.非 首先简单说一下他们之间的区别: HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap

黑马程序员——Java基础---递归

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!                                                                       递归 Java支持递归. 递归是根据自身定义内容的过程.就java编程而言,递归是一个允许方法调用自身的特征. 调

Java面试准备之String类专项突破+源码分析

String的源码中有很多Arrays的方法使用,建议先参阅Arrays的类库 基本介绍: String是一个比较特殊的类,有很多种建立的方法. 如果使用传统的构造方法比如 String s = new String("字符串");这时的对象会在堆上分配,这时候比较两个字符串地址就不相等,而用""双引号包起来的内容会在常量池中做停留,这时如果有两个内容一样的地址就一样了. 因此,使用==来比较字符串是不靠谱的. String类还实现了三个接口:Serializabl

String s=new String("xyz");

1 要理解这个,就要知道string类的工作原理. 2 在java中除了8中基本类型外,其他的都是类对象以及其引用. 3 所以 "xyz "在java中它是一个String对象.对于string类对象来说他的对象值是不能修改的,也就是具有不变性. 4 5 String s= "Hello "; 6 s= "Java "; 7 String s1= "Hello "; 8 String s2=new String( "

java 中递归的实现 以及利用递归方法实现汉诺塔

今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于编程来说,每次递归都会减少数据量: java中递归的模式 每个递归函数的开头一定是判断递归结束条件是否满足的语句(一般是if语句):函数体一定至少有一句是"自己调用自己"的.每个递归函数一定有一个控制递归可以终结的变量(通常是作为函数的参数而存在).每次自己调用自己时,此变量会变化(一般是

递归与分治-合并排序、快速排序以及循环赛问题

合并排序 合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 递归方法: 基本思想是:将待排序元素分成大小一致相同的2个子集和,分别对两个子集和进行排序,最终将排好序的子集合并成所需要的排好序的集合 package com.gqx.arithmetic.Recursion; public class Recursion_Merge2 { private static void mergeSort(

关于String s = new String(&quot;xyz&quot;); 创建几个对象的问题

引用自这位朋友:http://blog.sina.com.cn/s/blog_6a6b14100100zn6r.html 你知道在java中除了8中基本类型外,其他的都是类对象以及其引用.所以 "xyz "在java中它是一个String对象.对于string类对象来说他的对象值是不能修改的,也就是具有不变性. 看: String   s= "Hello "; s= "Java "; String   s1= "Hello "

java Comparator 实现不一样的排序

程序员面试宝典中,大家应该都看过各种排序方法: 冒泡 选择 插入 快速 堆排序 等等.. 这些针对的都是简单的数据类型,比如数值型int类型,当遇到实际情况中的复杂排序,比如对一个公司的员工,依据姓名,年龄,性别等不同的因素综合排序的情形,用上面的排序方法,将无法实现.但是不要害怕-java中有大神器:Comparator接口 我们来看下源码,简单的让你不知道该怎么做.. public interface Comparator<T> { /** * Compares its two argum