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

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

这是一道笔试题,请大家帮解决一下,四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 算法,有意思。

查看全部评分

27 个回复

倒序浏览
应该是8种吧,按2^3种,没算.

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 看题目!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 14:21:49
藤椅
()()()()
()()(())           (())()()
()(()())           (()())()
()((()))           ((()))()
(()()())
(()(()))           ((())())
((()()))
(((())))

12种

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2 辛苦。

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 18:50:27
板凳

回复 藤椅 的帖子

敢问此楼,要是3000对括号,那有多少种啊?

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2 问得好。

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-28 13:51:08
报纸

回复 地板 的帖子

嗯 你这个不对,所谓匹配就是有括号就要对应的括回。。你再加个几个条件语句就哦拉
回复 使用道具 举报
黑马网友  发表于 2011-7-28 13:55:19
地板

回复 地板 的帖子

给个提示就是0后面必须对应一个1 ,这个1的位置不确定。但是必须在0后

比如你的00011011就不对,则个0可以放在00011101这样就是匹配。。
懂了吗 改一下 就这个程序就哦了

评分

参与人数 1技术分 +5 收起 理由
老罗 + 5 写代码试试。

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-28 14:20:17
7#

回复 9 # 的帖子

也对啊 不好意思   是我错了

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2 哈哈

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-29 04:44:18
8#

感谢

题确实很难,很感谢大家的的帮忙
回复 使用道具 举报
黑马网友  发表于 2011-7-29 09:28:51
9#

回复 11 # 的帖子

是很难,又很麻烦的题。。。。老罗都笑话我了。。。我这个郁闷啊。。。
代码,我写不出来了,写代码的时候又想到新的东西了。。。我服了丽姐。。。

[img]http://hi.csdn.net/attachment/201107/29/6237444_1311902940fIFq.jpg[/img]
回复 使用道具 举报
黑马网友  发表于 2011-7-29 09:45:15
10#
我想提供一个算法思路是:把"()"做为一个字符串插入原来已有的字符串中,…。手机上网,无法代码…

评分

参与人数 1技术分 +1 收起 理由
admin + 1 等下记得把代码贴出来哦!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-29 10:10:15
11#

回复

别服我啊,我不会才问大家的。。。
回复 使用道具 举报
黑马网友  发表于 2011-7-29 10:15:24
12#

回复 13 # 的帖子

原有的字符串 你是怎么得出来的,()插入到原有字符串的时候,不能(。。。。。。)任意中间插入吗??  这题是我想复杂了吗???郁闷啊 一上午,头都大了。怎么想也想不明白了

有没有想过 即使得出一种 方式 但是这种方式的匹配也不值1种

看我画的图
[img]http://hi.csdn.net/attachment/201107/29/6237444_1311902940fIFq.jpg[/img]
回复 使用道具 举报
想到一个思路,个人觉得应该可行:
N对括号就有 2N个位置标签,用递归每次取出两个位置标签(小位置方0…),作为一个对象放入SET集合(原素无法重复),集合的大小就是所有排列
回复 使用道具 举报
my god!手机居然和电脑一样会自己帮人按键了!!!
现在打字更费劲了
将整个字符串作为对象,刚没说清楚.
就是太费CPU了
回复 使用道具 举报
黑马网友  发表于 2011-7-29 11:02:44
15#
回15楼:原有字符串最开始肯定是空,进行递规操作,对原字符串进行任意位置插入(所有位置都要遍历一次)…肯定有重复,生成结果放入set中。
回复 使用道具 举报
黑马网友  发表于 2011-7-29 11:07:53
16#
因为插入的时候是按"()"插入的,生成结果肯定符合,剩下工作就是对字符串的的所有位置进行遍历插入
回复 使用道具 举报
代码看起来更费劲吧,全是襄套的循环…
回复 使用道具 举报
黑马网友  发表于 2011-7-29 12:36:49
18#
public class Test{
        /*
         * sum 共有sum中排序
         * M,N左右括号的个数
         */
        private static int sum = 0;
        private static final int M = 4;
        private static final int N = 4;
        public static void main(String[] args) {
                fun(M,N);
                System.out.println(sum);
        }
        /*
         * 判断这种排序是否成功
         * m,n 表示还剩余的左右括号的个数
         * 如果剩余的左括号比右括号多,说明先前的右括号比左括号多,那么这种排序就错误
         * 如果左右括号没了,那么这种排序正确,sum 加1
         */
        private static boolean isRight(int m,int n) {
                if(m-n>0){
                        return false;
                }else if(m==0 ||n == 0){
                        sum += 1;
                        return false;
                }
                return true;
        }
        private static boolean fun(int m, int n) {
                InsertLeft(m-1,n);
                InsertRight(m,n-1);
                return true;
        }
        //插入左括号
        private static void InsertLeft(int m,int n) {
                if(isRight(m,n)){
                        fun(m,n);
                }
        }
        //插入右括号
        private static void InsertRight(int m,int n) {
                if(isRight(m,n)){
                        fun(m,n);
                }
        }
}
//14种排序方法

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
用java久了,都把二叉树给忘了,用二叉树貌似比较简单吧,code去
回复 使用道具 举报
黑马网友  发表于 2011-7-29 12:59:32
20#

回复 板凳 的帖子

要不你算一下3000对括号有多少种?
18对括号有477,638,700种,19对括号有1,767,263,190种
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马