黑马程序员技术交流社区
标题: 求解惑 [打印本页]
作者: 孟小垚 时间: 2016-7-12 23:45
标题: 求解惑
16、 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
原始字符串是"abc",打印得到下列所有组合情况:
"a" "b" "c"
"ab" "bc" "ca" "ba" "cb" "ac"
"abc" "acb" "bac" "bca" "cab" "cba"
求大神来个代码看看像这些类的模版代码是什么样的,谢谢
作者: ImKing 时间: 2016-7-13 00:15
初步解决方法:
(1)分析输入的串组合情况(例如,串长为2,3,4等)
(2)通过循环组合各串长(例如:2 , 3 , 4等),然后利用反转函数reverse()生成另一半
(3)举例:
输入串:
“abc”
循环得到串长为2的组合:“ab”、“ac”“bc”,反转后得到串长“ba”“ca” “cb”
或许不是很好的方法,仅是一掠而过的想法
作者: 孟小垚 时间: 2016-7-13 18:17
可以写一下这个循环组合的代码吗? 就是这块不理解,谢谢
作者: ImKing 时间: 2016-7-13 19:50
- public class Combination {
- public static void main(String[] args) {
- String str = "abc";
- String[] arrs = new String[3];
- System.out.println("长度为 1 的字符组合:");
- for (int m = 0; m < str.length(); m++) {
- arrs[m] = "" + str.charAt(m);
- System.out.print(arrs[m] + " ");
- }
- System.out.println();
-
- System.out.println("长度为 2 的字符组合:");
- for (int i = 0; i < arrs.length; i++) {
- for (int j = 0; j < arrs.length; j++) {
- if (i == j) {
- continue;
- }
- System.out.print(arrs[i] + arrs[j] + " ");
- }
- }
- System.out.println();
- System.out.println("长度为 3 的字符组合:");
- for (int i = 0; i < arrs.length; i++) {
- for (int j = 0; j < arrs.length; j++) {
- for (int l = 0; l < arrs.length; l++) {
- if (i == j || i == l || j == l) {
- continue;
- }
- System.out.print(arrs[i] + arrs[j] + arrs[l] + " ");
- }
- }
- }
- }
- }
复制代码
, 呐 花花送你
这种方式还是有点儿片面,不过还是没有较好的办法(暂时)
作者: 孟小垚 时间: 2016-7-14 10:01
明白了,谢谢了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |