`

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

    博客分类:
  • 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 
分享到:
评论

相关推荐

    C++ 文件及字符串

    4. 只读取指定字符集的字符串:读取 1 到 9 和小写字母的组合。 ```cpp sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf); printf("%s\n", buf); // 输出:123456abcdedf ``` 5. 读取到指定字符集为止的字符串...

    程序员编程艺术:面试和算法心得

    - **题目描述**: 给定一个字符串,如 "abcdef",要求把字符串前面的若干个字符移动到字符串的尾部,例如将 "a" 和 "b" 移动到尾部,使得原字符串变成 "cdefab"。要求实现一个函数,其时间复杂度为 O(n),空间复杂度...

    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 图的克隆 ...

    Python Cookbook

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

    函数式编程术语解释

    例如,我们可以将一个函数用于将数字转为字符串,然后与Math.floor函数组合,实现对数字的先取整后转为字符串的操作。 Purity(纯函数)是函数式编程中一个非常重要的概念。一个纯函数是指一个函数对于相同的输入...

    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 ...

    php explode函数实例代码

    `explode()` 的反向操作是 `implode()`,它用于将数组合并成一个字符串。此外,`split()` 函数(已废弃)在早期版本的 PHP 中也有类似功能,但在 PHP 5.3.0 后被 `explode()` 替代。 总结,`explode()` 函数是 PHP ...

    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