由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一道google面试题
相关主题
一个小题 谁能帮着给点思路 谢谢啦!leetcode的3sum的运行时间问题
question about Leetcode #113 LeetCode – Path Sum II (Java)请教leetcode Subsets II
问道leetcode的题:Combination Sum IICombination Sum II哪里做错了
问一道leetcode上的题目 combination sumCS: print all combination from an array
a problem from leetcode: high efficiency algorithm for combinations problem问个fb onsite题目
combinations 有没有 iterative的方法阿 ?求救, F家onsite算法题
问个递归的问题问一个java generic的问题
请教leetcode Combination Sum II的code,谢谢。问个Amazon面试题
相关话题的讨论汇总
话题: list话题: integer话题: newlist话题: arraylist话题: stack
进入JobHunting版参与讨论
1 (共1页)
x******8
发帖数: 48
1
给一个List>,打印出所有组合
eg.
{
{a, b},
{c, d, e},
{f, g}
}
打印出来:
{a, c, f}
{a, c, g}
{a, d, f}
{a, d, g}
{a, e, f}
{a, e, g}
{b, c, f}
......
lc原题,letter combinations of a phone number的变种
很容易想到的解法是
先计算前两个list的组合{a, c} {a, d} {a, e} {b, c} {b, d} {b, e},得到结果再
与第三个list计算,最后打印出来,但这样需要额外的空间保存中间结果
怎么优化空间复杂度,不需要维护中间结果,使空间复杂度为O(1)
即找到一个combination就打印,然后找下一个combination。
c****8
发帖数: 76
2
backtracking
c*******e
发帖数: 373
3
这不是for循环就搞定了吗?
唯一的特别之处,是循环层数不定,所以没法直接用多层for语句来写,循环计数器变
量个数不定,所以数组来存,然后自己模拟多层for语句
int[] ijkl = new int[list.size()];
把 ijkl[0] 作为最内层循环计数器,ijkl[list.size() - 1]作为最外层循环计数器
- 每次处理,内层循环计数器加1,如果没有超出当前层的元素个数,就输出一次,然
后继续循环
- 如果计数器加1后,过界了,则充值为0,并且把外一层计数器加1,直到不再过界,
则继续循环
- 如果所有计数器都过界了,当然任务完成,退出程序
a****r
发帖数: 87
4
同意chenm8. 就是一个backtracking.
有k个position, and each position can have list[k] 可能。
c******n
发帖数: 4965
5
放水题啊, 该感谢出题的

【在 x******8 的大作中提到】
: 给一个List>,打印出所有组合
: eg.
: {
: {a, b},
: {c, d, e},
: {f, g}
: }
: 打印出来:
: {a, c, f}
: {a, c, g}

r********7
发帖数: 102
6
抛个砖~ 自己写了一个, stack 然后 backtracking。 其实写完感觉stack多此一
举,不想改了。 请大神们无视
public class Solution {
public void printCombo(List> input){
if (input == null || input.size()==0){
return;
}
Stack> stc = new Stack>();
for (int i=0; i stc.push(input.get(i));
}
List> res = new ArrayList>();
while(!stc.isEmpty()){
List tmp = stc.pop();
if (res.isEmpty()){
for (int j=0;j List newList = new ArrayList();
newList.add(tmp.get(j));
res.add(newList);
}
}else {
List> res2 = new ArrayList>();
for (List cur : res){
for (int j=0; j List newList = new ArrayList();
newList.addAll(cur);
newList.add(0,tmp.get(j));
res2.add(newList);
}
}
res = res2;
}
}
for (List cur : res){
System.out.println();
for(int tmp : cur){
System.out.print(tmp);
}
}
}
}
n******n
发帖数: 12088
7
经典递归题。

【在 c*******e 的大作中提到】
: 这不是for循环就搞定了吗?
: 唯一的特别之处,是循环层数不定,所以没法直接用多层for语句来写,循环计数器变
: 量个数不定,所以数组来存,然后自己模拟多层for语句
: int[] ijkl = new int[list.size()];
: 把 ijkl[0] 作为最内层循环计数器,ijkl[list.size() - 1]作为最外层循环计数器
: - 每次处理,内层循环计数器加1,如果没有超出当前层的元素个数,就输出一次,然
: 后继续循环
: - 如果计数器加1后,过界了,则充值为0,并且把外一层计数器加1,直到不再过界,
: 则继续循环
: - 如果所有计数器都过界了,当然任务完成,退出程序

n******n
发帖数: 12088
8
太罗嗦。白板写不下。

【在 r********7 的大作中提到】
: 抛个砖~ 自己写了一个, stack 然后 backtracking。 其实写完感觉stack多此一
: 举,不想改了。 请大神们无视
: public class Solution {
: public void printCombo(List> input){
: if (input == null || input.size()==0){
: return;
: }
: Stack> stc = new Stack>();
: for (int i=0; i: stc.push(input.get(i));

G*****m
发帖数: 5395
9
这不就是backtrack吗?

【在 x******8 的大作中提到】
: 给一个List>,打印出所有组合
: eg.
: {
: {a, b},
: {c, d, e},
: {f, g}
: }
: 打印出来:
: {a, c, f}
: {a, c, g}

1 (共1页)
进入JobHunting版参与讨论
相关主题
问个Amazon面试题a problem from leetcode: high efficiency algorithm for combinations problem
G家面试题combinations 有没有 iterative的方法阿 ?
一道面试算法题问个递归的问题
问个算法题2请教leetcode Combination Sum II的code,谢谢。
一个小题 谁能帮着给点思路 谢谢啦!leetcode的3sum的运行时间问题
question about Leetcode #113 LeetCode – Path Sum II (Java)请教leetcode Subsets II
问道leetcode的题:Combination Sum IICombination Sum II哪里做错了
问一道leetcode上的题目 combination sumCS: print all combination from an array
相关话题的讨论汇总
话题: list话题: integer话题: newlist话题: arraylist话题: stack