由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一个老算法题【update】
相关主题
1道brianbench 的题 c++c++ 问题
代码求助GOOG intern interview 题目
问一道关于reverse a C-string的问题【一个BB公司问的字母排序的问题】
请教一道面试题今天G家电面的一道题
一个答案看不明白谁解释一下问个空间复杂度问题
一道题stream palindrome
LC的题确实变难了。。。有人愿意合买careercup那本书吗?
问个《编程实践》(英文版)里面的问题Longest common string问题
相关话题的讨论汇总
话题: count话题: str话题: string话题: int话题: print
进入JobHunting版参与讨论
1 (共1页)
g**********y
发帖数: 14569
1
前天在版上看到打印所有矩阵结合次序(Catalan Numbers)的讨论,最后给出的程序比
较长,我想了一下,既然都是Catalan Numbers, 那么生成Dyck word list的程序应该
可以变形成矩阵结合次序。
CareerCup给出的Dyck word list程序很简洁,我就试着映射了一下:
先推‘A’进栈
对应Dyck word (比如XXXYYY), 遇到X, push nextChar 进栈;
遇到Y, 如果pop()出两个,结合后推进栈
==============================================================
以上是写完后在路上刚悟到的,这个映射应该还算简单。如果不用映射,谁能给个更简洁的解法?
附Java code ==>
public void generate(int count) {
print(count, count, new char[2*count], 0);
}

public void print(int l, int r, char[] str, int count) {
if (l==0 && r==0) print(str);
if (l>0) {
str[count] = 'X';
print(l-1, r, str, count+1);
}
if (r>l) {
str[count] = 'Y';
print(l, r-1, str, count+1);
}
}

private void print(char[] str) {
Stack s = new Stack();
int k = 0;
s.push(getChar(k++));
for (int i=0; i if (str[i] == 'X') {
s.push(getChar(k++));
}
else {
String t = s.pop();
s.push("(" + s.pop() + t + ")");
}
}
System.out.println(s.pop());
}

private String getChar(int k) {
char c = (char) ('A' + k);
return c + "";
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
Longest common string问题一个答案看不明白谁解释一下
facebook telephone interview from careercup一道题
CareerCup 13.9的solution有memory leakLC的题确实变难了。。。
careercup 150一题。 9.2问个《编程实践》(英文版)里面的问题
1道brianbench 的题 c++c++ 问题
代码求助GOOG intern interview 题目
问一道关于reverse a C-string的问题【一个BB公司问的字母排序的问题】
请教一道面试题今天G家电面的一道题
相关话题的讨论汇总
话题: count话题: str话题: string话题: int话题: print