sony面试题

dearhit 2007-09-12 10:01:27
把一个数组里的数组合全部列出了 比如1 2 列出来为 1, 2 ,12,21,


代码是:
public static void main(String[] args) throws Exception {
String[] array = new String[] {
"1", "2", "3", "4"
};
listAll(Arrays.asList(array), "");
}

public static void listAll(List candidate, String prefix) {
// if (candidate.isEmpty()) {
System.out.println(prefix);
// }

for (int i = 0; i < candidate.size(); i++) {
List temp = new LinkedList(candidate);
listAll(temp, prefix + temp.remove(i));
}
}

=====输出=====
1
12
123
1234
124
1243
13
132
1324
134
1342
14
142
1423
143
1432
2
21
213
2134
214
2143
23
231
2314
234
2341
24
241
2413
243
2431
3
31
312
3124
314
3142
32
321
3214
324
3241
34
341
3412
342
3421
4
41
412
4123
413
4132
42
421
4213
423
4231
43
431
4312
432
4321

请高人指点一下:从1234变为123到12 再到124时怎么转变的啊 ?多谢了


...全文
381 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dearhit 2007-09-12
  • 打赏
  • 举报
回复
能否在解释下向上的递归怎么回事啊

先把分给你
dearhit 2007-09-12
  • 打赏
  • 举报
回复
多谢了 还是有点不明白 :) 我自己再看看 多谢
宋玮-深圳 2007-09-12
  • 打赏
  • 举报
回复
输出1之前,i可以取1--4,然后输出1,数组变为{2,3,4}进到里面继续递归。

当里面递归完,也就是1234后,开始返回向上的递归
dearhit 2007-09-12
  • 打赏
  • 举报
回复
唯一不明白的就是prefix到了1234后怎么会减啊 变为123 然后12 然后再124
宋玮-深圳 2007-09-12
  • 打赏
  • 举报
回复
准确的说是所有结果前还输出了一个空行。最开始prefix为空。

public static void listAll(List candidate, String prefix) {

System.out.println(prefix);
虽然是递归函数,但是关注输出的prefix应该很容易看
dearhit 2007-09-12
  • 打赏
  • 举报
回复
能否具体说明下从1234变为124的执行过程啊
宋玮-深圳 2007-09-12
  • 打赏
  • 举报
回复
递归。。
宋玮-深圳 2007-09-12
  • 打赏
  • 举报
回复
递归这个东西就是一层一层的向下调用,直到最后有个固定答案的出口才进行真正的求解,然后用得到的结果向上层一步一步返回进行计算。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧