`

输出任意数目组合的字符串

    博客分类:
  • java
 
阅读更多
package com.xianfengshangtai.interview;

/**
 * 题目:给定一个字符串,里面用空格分开为6个或者更多的子单元,如,01 02 03 04 05 06 06 08...
 * 请写一个程序,返回任6个进行组合的所有字符串。请保持输出字符串中的元素顺序与原始顺序已知
 * 示例:
 * 输入:
 * 01 02 03 04 05 06 07
 * 输出的字符串数组为:
 * 01 02 03 04 05 06
 * 01 02 03 04 05 07
 * 01 02 03 04 06 07
 * 01 02 03 05 06 07
 * 01 02 04 05 06 07
 * 01 03 04 05 06 07
 * 02 03 04 05 06 07 
 *
 */
public class Problem23_25 {
	public static void main(String[] args) {
		String input = "01 02 03 04 05 06 07";
		String [] target = input.split(" ");
		if(target.length>=6){
			distil(null,target,6);
		}
	}

	public static void distil(String[] selected,String[] target,int count){
		if(target ==null||target.length<count){
			return;
		}


		if(count==1||target.length==count){
			//if(____________________)
			String selectedStr = "";
			if(selected!=null){
				for(int i=0,cnt=selected.length;i<cnt;i++){
					selectedStr += selected[i]+" ";
				}
			}
			/**
			 * 如果要输出的子单元的的单元长度为1的话
			 * 则输出数组target里面的每个元素,每行一个元素
			 */
			if(count ==1){
				for(int i=0,cnt=target.length;i<cnt;i++){
					System.out.println(selectedStr+target[i]+" ");
				}
			}else{
             /**
              * 否则,一行输出数组target里面的所有元素
              */
				for(int i=0,cnt=target.length;i<cnt;i++){
					selectedStr +=target[i]+ " ";
				}
				System.out.println(selectedStr);
			}
		}else{
			/**
			 * 生成新的target和selected数组
			 */
			String[] newSelected = null;
			if(selected == null){
				newSelected = new String[] {target[0]};
			}else{
				newSelected = new String[selected.length+1];
				for(int i=0,cnt=selected.length;i<cnt;i++){
					newSelected[i] = selected[i];
				}
				newSelected[selected.length] = target[0];
			}
			String [] newTarget = new String[target.length-1];
			for(int i=1,cnt=target.length;i<cnt;i++){
				newTarget[i-1] = target[i];
			}
			//distil(selected, newTarget, count);
			distil(newSelected, newTarget, count-1);
			//________________________
			distil(selected, newTarget, count);
			//________________________
		}
	}
}



运算结果:
01 02 03 04 05 06 
01 02 03 04 05 07 
01 02 03 04 06 07 
01 02 03 05 06 07 
01 02 04 05 06 07 
01 03 04 05 06 07 
02 03 04 05 06 07 
分享到:
评论

相关推荐

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...

    LeetCode解题总结

    13.8 字符串交叉组合 13.9 旋转字符串 13.10 最小路径和 13.11 所有的编码方式 13.12 独一无二的子序列数 13.13 拆分单词 13.13.1 单词是否由词典中的单词组成 13.13.2 返回所有可以切分的解 14. 图 14.1 图的克隆 ...

    Java-PHP-C#

    "^The": 匹配以 "The"开头的字符串; "of despair$": 匹配以 "of despair" 结尾的字符串; "^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配 "notice": 匹配包含notice的字符串 你可以看见...

    入门学习Linux常用必会60个命令实例详解doc/txt

    出于安全考虑,输入账户密码时字符不会在屏幕上回显,光标也不移动。 登录后会看到下面这个界面(以超级用户为例): [root@localhost root]# last login:Tue ,Nov 18 10:00:55 on vc/1 上面显示的是登录星期、月...

    Python Cookbook

    1.3 测试一个对象是否是类字符串 8 1.4 字符串对齐 10 1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐词反转 14 1.8 检查字符串中是否包含某字符集合中的字符 15 1.9 简化字符串的...

    Linux与unix shell编程指南

    21.1.1 字符串输出 236 21.1.2 数字输出 237 21.1.3 布尔输出 237 21.2 tput用法 237 21.2.1 设置tput命令 237 21.2.2 使用布尔输出 237 21.2.3 在脚本中使用tput 237 21.2.4 产生转义序列 238 21.2.5 光标位置 239 ...

    linux shell 编程教程

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    shell 编程指南pdf

    7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 51 7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配...

    LINUX与UNIX SHELL编程指南(很全)

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    freemarker总结

    有一种特殊的字符串称为raw字符串,被认为是纯文本,其中的\和{等不具有特殊含义,该类字符串在引号前面加r,下面是一个例子: ${r"/${data}"year""}屏幕输出结果为:/${data}"year" 转义 含义 ...

    linux与unix shell 编程(下)

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    LINUX与UNIX SHELL编程指南.rar

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    Linux与unix shell编程指南1.rar

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    LINUX与UNIX SHELL编程指南

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    shell教程-30章,下了之后会让你大吃一惊,相当好

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    Linux与Unix Shell编程指南(PDF格式,共30章)

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

Global site tag (gtag.js) - Google Analytics