作者cha122977 (CHA)
看板java
标题Re: [问题] 数字拆解
时间Tue Apr 14 14:29:49 2015
虽然给鱼不如教钓鱼,不过思路还真不好解释,所以附上source code
想法很简单 把所有可能都跑过就行了
用recursive是因为比较好处理多重条件(这次取1个或者取2个)
private void splitNumber(String remain, String handled) {
if (remain.length() == 0)
System.out.println(handled.substring(0, handled.length() -2));
} else if (remain.length() == 1) {
System.out.println(handled + remain);
} else { // s.lenght() >= 2
splitNumber(remain.substring(1), handled + remain.substring(0, 1) + ", ");
splitNumber(remain.substring(2), handled + remain.substring(0, 2) + ", ");
}
}
使用function:
splitNumber("1234567", "");
结果:
1, 2, 3, 4, 5, 6, 7
1, 2, 3, 4, 5, 67
1, 2, 3, 4, 56, 7
1, 2, 3, 45, 6, 7
1, 2, 3, 45, 67
1, 2, 34, 5, 6, 7
1, 2, 34, 5, 67
1, 2, 34, 56, 7
1, 23, 4, 5, 6, 7
1, 23, 4, 5, 67
1, 23, 4, 56, 7
1, 23, 45, 6, 7
1, 23, 45, 67
12, 3, 4, 5, 6, 7
12, 3, 4, 5, 67
12, 3, 4, 56, 7
12, 3, 45, 6, 7
12, 3, 45, 67
12, 34, 5, 6, 7
12, 34, 5, 67
12, 34, 56, 7
※ 引述《OoShiunoO (机机勳)》之铭言:
: 请问各位大大
: 如果我有一个数字, ex: 213112
: 我要怎麽把它拆成各种组合呢?(题目是限定最大只能拆成10位数)
: 2,1,3,1,1,2
: 21,3,1,1,2
: 2,13,1,1,2
: .
: .
: .
: .
: 21,31,12
: 烦请各位大大给个提示,谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.87.150.73
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1428992992.A.957.html
1F:→ cha122977: 对了 这个做法其实是divide and conquer 可以wiki一下 04/14 14:33
2F:→ jjmachen: 原PO的10位数,原来是指不超过99的数字,还以为是10个位数 04/14 21:54
3F:推 omie: 10位数跟2位数搞不清楚.... 04/15 01:21
4F:→ cha122977: 我是看例子推敲的…不过10位的话做法也是类似 04/15 17:03
5F:推 omie: 我说的是原po把2位数当成10位数 04/15 22:39
6F:→ jej: 用ABC 分成 A B C, AB C, A BC 写成基本method, 接下来递回 04/23 12:33
7F:→ jej: 中间判断 A或是 B或是C 或是AB 或是BC 超过十位则略过 04/23 12:34
8F:→ cha122977: 楼上这种做法中 ABCD中的BC会被算到两次(A BC 和 BC D) 04/24 18:18