返回信息流import java.util.*;
public class GenerateParenthesis {
/**
* @param args
*/
public static ArrayList<String> Parenthesis(int n) {
ArrayList<String> result = new ArrayList<String>();
if (n <= 0) {
return result;
}
helper(result, "", n, n);
return result;
}
public static void helper(ArrayList<String> result,
String paren, // current paren
int left, // how many left paren we need to add
int right) { // how many right paren we need to add
if (left == 0 && right == 0) {
result.add(paren);
return;
}
if (left > 0) {
//每次step进入时,提示找不到源..
helper(result, paren + "(", left - 1, right);
}
if (right > 0 && left < right) {
helper(result, paren + ")", left, right - 1);
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
;
//这里断点调试
ArrayList<String> arr=Parenthesis(2);
System.out.println(arr);
System.out.println(arr.size());
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #51374同步于 2016/7/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求助,eclipse调试,找不到源
henceman
2016/7/4镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 nuanyangyang 的大作中提到: 】
: 没遇到过。eclipse一向非常可靠。
暖神,像这种递归的算法怎么去分析?这个算法我纸上写写就晕了,不知道运行到哪,返回到哪了
【 在 henceman 的大作中提到: 】
: 暖神,像这种递归的算法怎么去分析?这个算法我纸上写写就晕了,不知道运行到哪,返回到哪了
这种长度的算法应该一眼就能看出来,没什么“分析”的难度。实在困难的话,学学Haskell语言打基础吧。
【 在 henceman 的大作中提到: 】
: 暖神,像这种递归的算法怎么去分析?这个算法我纸上写写就晕了,不知道运行到哪,返回到哪了
设计递归算法也是有技巧的,比如,不要把函数起名叫helper。函数名应该有意义。
而且,要想好一个函数应该做什么。这个程序完全没有解释任何函数是做什么的。这才是关键。然后才是想“这个问题怎么分解成小问题”。
【 在 nuanyangyang 的大作中提到: 】
:
: 设计递归算法也是有技巧的,比如,不要把函数起名叫helper。函数名应该有意义。
: 而且,要想好一个函数应该做什么。这个程序完全没有解释任何函数是做什么的。这才是关键。然后才是想“这个问题怎么分解成小问题”。
暖神,我老是想递归最后一步到哪里结束,然后向上返回,仿佛这样才明白算法解决什么问题,这样思考方式往往陷入怪圈
能不能结合这个题目(卡特兰数)讲讲暖神你是如何看懂递归的过程?