查看: 2075| 回复: 9
跳转到指定楼层
上一主题 下一主题
收起左侧

[CareerCup] 求助 cc150 8.5, 答案看不懂~

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
Implement an algorithm to print all valid (e g , properly opened and closed) combi- nations of n-pairs of parentheses

public static void printPar(int l, int r, char[] str, int count) {
                if (l < 0 || r < l) return; // invalid state
                if (l == 0 && r == 0) {
                        System.out.println(str); // found one, so print it
                        } else {
                                if (l > 0) { // try a left paren, if there are some available
                                        str[count] = '(';
                                        printPar(l - 1, r, str, count + 1);
                                }
                                if (r > l) { // try a right paren, if there’s a matching left
                                        str[count] = ')';
                                printPar(l, r - 1, str, count + 1);
                                }
                }
        }
       
       
        public static void printPar(int count) {
                char[] str = new char[count*2];
                printPar(count, count, str, 0);
        }

调用printPar的时候只declare了一个char[]~这样是不是只能又一个string吗?为什么能打印出别的string呢?我尝试着画stack的图~画到了如下图我就画不出来了~
printPar(2,2,"",0)
        str="("
        printPar(1,2,"(",1)
                str="(("
                printPar(0,2,"(("2)
                        str="(()"
                        printPar(0,1,"(()",3)
                                str="(())"
                                printPar(0,0,"(())",4)
                                        print(str)
                        return
                return
        printPar(1,1"((",2)
                str 。。。。。。(写不出了)

希望大师们指点~

上一篇:算法导论的书
下一篇:【第三轮】6.16-6.22 CareerCup 1.1
🔗
readman 2014-6-15 15:21:11 | 只看该作者
全局:
首先, 其实我没明白你问什么, 这题是典型的dfs思想题, 在这里的str char组 是一个"动态数组", 他只是存储一个情况下(你stack中的一个frame)的当前char, 你可以理解成一个temp. 至于为什么打印出别的strnig, 因为每次str中的char是不一样的? 不知道你是不是问这个...你看你的stack的frame, 每次都update的. 所以打印出不一样的string
回复

使用道具 举报

🔗
 楼主| sqzhang17 2014-6-15 16:07:01 | 只看该作者
全局:
readman 发表于 2014-6-15 15:21
首先, 其实我没明白你问什么, 这题是典型的dfs思想题, 在这里的str char组 是一个"动态数组", 他只是存储一 ...

哦哦~不好意思哈~本人转cs的~刚看完cs61b~想尝试着做做CC150~做了前3章~发现用到了好多recursive的方法~所以想先做做第8章~加强一下~

你说的dfs是depth first search的意思是吧~?
回复

使用道具 举报

🔗
readman 2014-6-15 16:23:01 | 只看该作者
全局:
sqzhang17 发表于 2014-6-15 16:07
哦哦~不好意思哈~本人转cs的~刚看完cs61b~想尝试着做做CC150~做了前3章~发现用到了好多recursive的方法~ ...

嗯. dfs是一个思想, 也是一个通用模版
类似于:
public void dfs (数组,tmp, count)
for(int i = 0 ; i < 数组长度; i++) {
if(tmp or 数组 满足什么条件) {
   做一些事情
}
dfs(数组, tmp, cont++) // 下一个循环的变量
}

评分

参与人数 1大米 +3 收起 理由
sqzhang17 + 3 回答的很好!

查看全部评分

回复

使用道具 举报

🔗
 楼主| sqzhang17 2014-6-16 03:20:10 | 只看该作者
全局:
readman 发表于 2014-6-15 16:23
嗯. dfs是一个思想, 也是一个通用模版
类似于:
public void dfs (数组,tmp, count)

哦哦~呵呵~好的~cs61b里面有讲过dfs~等我再回顾一下~

我记得dfs和bfs是运用在graph题目下的~怎么这种题目也可以用?

不好意思~麻烦你解答了我这个小白的一些百亩的问题~惭愧啊~
回复

使用道具 举报

🔗
readman 2014-6-16 10:46:35 | 只看该作者
全局:
sqzhang17 发表于 2014-6-16 03:20
哦哦~呵呵~好的~cs61b里面有讲过dfs~等我再回顾一下~

我记得dfs和bfs是运用在graph题目下的~怎么这种 ...

dfs是一种递归的思路..二叉树可用, 数组可用, 排列可用..很多地方都可以

评分

参与人数 1大米 +3 收起 理由
sqzhang17 + 3 回答的很好!

查看全部评分

回复

使用道具 举报

🔗
 楼主| sqzhang17 2014-6-16 13:26:10 | 只看该作者
全局:
readman 发表于 2014-6-16 10:46
dfs是一种递归的思路..二叉树可用, 数组可用, 排列可用..很多地方都可以

感觉递归好像运用的很多~但是感觉好难啊~哎~没有抓到精髓啊~慢慢磨练磨练吧~
回复

使用道具 举报

🔗
readman 2014-6-16 13:35:32 | 只看该作者
全局:
sqzhang17 发表于 2014-6-16 13:26
感觉递归好像运用的很多~但是感觉好难啊~哎~没有抓到精髓啊~慢慢磨练磨练吧~

递归的精髓在于, 你看到一个迭代, 就能写出递归.所以平时多写就好了....

评分

参与人数 1大米 +3 收起 理由
sqzhang17 + 3 谢谢你的介绍!

查看全部评分

回复

使用道具 举报

🔗
 楼主| sqzhang17 2014-6-16 14:07:42 | 只看该作者
全局:
readman 发表于 2014-6-16 13:35
递归的精髓在于, 你看到一个迭代, 就能写出递归.所以平时多写就好了....

嗯~好的~谢谢了~万分感谢~
回复

使用道具 举报

🔗
 楼主| sqzhang17 2014-6-16 14:07:51 | 只看该作者
全局:
readman 发表于 2014-6-16 13:35
递归的精髓在于, 你看到一个迭代, 就能写出递归.所以平时多写就好了....

嗯~好的~谢谢了~万分感谢~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表