📣 独立日限时特惠: VIP通行证立减$68
楼主: reeeelan
跳转到指定楼层
上一主题 下一主题
收起左侧

求思路,这个题实在没思路了

无效楼层,该帖已经被删除
🔗
molotov 2013-6-25 12:47:00 | 只看该作者
全局:
一个n*n的table从左上角走到右下角,(表示往左走,)表示往下走。
最终的path遍历table的一半。
回复

使用道具 举报

🔗
mz31098 2013-7-8 23:49:12 | 只看该作者
全局:
本帖最后由 mz31098 于 2013-7-8 23:55 编辑

不错,很有意思的题目,学习了
回复

使用道具 举报

🔗
cfq12 2013-7-11 16:12:21 | 只看该作者
全局:
这个题cc150里的2种解法都很好。建议lz去看看。
回复

使用道具 举报

🔗
tigermee 2013-7-14 14:28:45 | 只看该作者
全局:
本帖最后由 tigermee 于 2013-7-14 14:34 编辑

典型的backtracking问题。leetcode online judge原题,generate parentheses
  1. class Solution {
  2. public:
  3.     vector<string> generateParenthesis(int n) {
  4.         // Start typing your C/C++ solution below
  5.         // DO NOT write int main() function
  6.         vector<string> res;
  7.         generator(res, "", 0, 0, n);
  8.         return res;
  9.     }

  10.     /*
  11.      * res:结果集
  12.      * s: 当前已经生成的字符串
  13.      * l:已经使用的"("的个数
  14.      * r:已经使用的")"的个数
  15.      * n:"(", ")"最多的个数
  16.      */
  17.     void generator(vector<string> &res, string s, int l, int r, int n) {
  18.         if (l == n) {
  19.             res.push_back(s.append(n - r, ')'));
  20.             return;
  21.         }

  22.         generator(res, s+"(", l+1, r, n);
  23.         if (l > r) {
  24.             generator(res, s+")", l, r+1, n);
  25.         }
  26.         return;
  27.     }
  28. };
复制代码
回复

使用道具 举报

🔗
GTea 2013-7-19 13:18:24 | 只看该作者
全局:
我觉得可以用递归,如下:

如果我们知道怎么处理n=2 pairs of parentheses,我们就可以通过将the third pair of parentheses插入2 pairs of parentheses的所有valid combination的每一个可能插入的位置来获得3 pairs of parentheses的所有valid的combination

n=2时,valid combination有 ()() 和(())。现在将third pair插入第一个combination,获得
()()(), (())(), ()()(), ()(()), and ()()()

将third pair插入第二个combination,获得
()(()), (()()), ((())), (()()), (())()

以此类推,知道了n-1的解,就可以生成n的解,base case n=1, 只有一种情况:(),用递归获得n>1时的情况。

一个需要注意的问题是,可能生成重复的,可行的解决方法是,建一个hash table,每生成一个combination,check其是否已经在hash table里了,如果不在,插入;否则丢弃。

例如上面的例子,所有unique的combinations有:
()()(), (())(), ()(()), (()()), ((()))

最后输出hash table里所有的combinations即可。

PS: LZ好像漏了一个(()())吧
回复

使用道具 举报

🔗
justinjoykey 2013-7-21 11:08:35 | 只看该作者
全局:
一个一个“添加括号”,递归
情况只有2种
1)包住原来的
2)在左边或者右边添加
这样可以证明,没有重复计算
回复

使用道具 举报

🔗
asdfyou6 2013-7-21 11:13:07 | 只看该作者
全局:
本帖最后由 asdfyou6 于 2013-7-21 11:19 编辑

递归吧...
看了眼CC比我自己想的简单多了,原来就只知道recursive backtracking
学艺不精啊,自我反思
回复

使用道具 举报

🔗
marine 2013-8-12 00:10:17 | 只看该作者
全局:
我觉得这个题可以用……类似二叉树的思路来做?
回复

使用道具 举报

🔗
xperzy 2013-8-12 00:25:59 | 只看该作者
全局:
回复

使用道具 举报

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

本版积分规则

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