A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 王丽   /  2011-7-27 13:09  /  5296 人查看  /  27 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

黑马网友  发表于 2011-7-29 13:18:51
21#
回复21楼:我都声明了…没有网,手机上的
回复 使用道具 举报
黑马网友  发表于 2011-7-29 21:30:44
22#
忒幸亏了,终于弄出来了。
使用递归实现思路:
1.        都以最后一个括号为目标,用他的左括号在其他括号中间移动(关键的思想)
如()()()()可以在移成这样:
()()(())
()(()())
(()()())
2.        由上面分析出要处理的有两部分别是:
第一部分:()()(())....
第二部分:()(()())、(()()()).....
3.        最后就是每完成一次减1,直到只有一个括号为止。
下面看代码:[code=java]package com.itcast.test;

public class Recursion {

        public static void main(String[] args) {
                System.out.println(select(4));
        }
        /*
         * sum=1表示并排的括号如:();()();()()()
         */
        public static int sum = 1;
        public static int select(int num) {
                if (num == 1) {
                        return sum;
                }
                // 括号的个数-1
                /*
                 * 假如num初始为4
                 * ()()(())
                 * ()(()())
                 * (()()())
                 * 得到3个
                 */
                sum += --num;
                /*
                 * 假如num初始为4
                 * ()()|(())
                 * (())|(())
                 * 处理|左边的
                 * 得到1个
                 */
                for (int i = num - 1; i > 1; i--) {
                        select(num - 1);
                }
                /*
                 * 假如num初始为4
                 * ()(()())
                 * ()((()))
                 * 处理括号里面的
                 */
                for (int i = num; i > 1; i--) {
                        select(i);
                }
                // 每次减一个括号 的递归调用
                return select(num);
        }
}[/code]代码简单,但是真的想得头都炸了,还望版主多多多多的支持啊:lol

评分

参与人数 1技术分 +2 收起 理由
admin + 2 辛苦了!

查看全部评分

回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马