由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教 print factors 这个题
相关主题
讨论一个g题被gray code打击了
permutationII ,如果不用hashset,用迭代的方法,如何防止重复请教leetcode Combination Sum II的code,谢谢。
发个L家面经,攒rp请教leetcode Subsets II
[cloudera面试] senior engineercombination sum II
leetcode的3sum的运行时间问题问一道题
请教leetcode上的那道Word Break II,多谢!问一个3 sum的问题
问个fb onsite题目path sum II OJ 超时
问一个java generic的问题请教一下subset I 输出子集顺序问题
相关话题的讨论汇总
话题: list话题: integer话题: int话题: result话题: vector
进入JobHunting版参与讨论
1 (共1页)
s***g
发帖数: 1250
1
printFactors(int n)
input:32
output:
1 * 32
2 * 16
2 * 2 * 8
2 * 2 * 2 * 4
2 * 2 * 2 * 2 * 2
2 * 4 * 4
4 * 8
没有思路啊。
只能想到先找出所有的factor。 大牛们能给点思路吗?谢谢
l*****a
发帖数: 14598
2
List> func(int n) {
List> result= new ArrayList>();
List cur=new ArrayList<>();
get(n,2,cur,result);
return result;
}
public get(int target,int start,List cur,List> result
) {
if(target==1) {
result.add(new ArrayList(cur));
return;
}
for(int i=start;i<=target/2;i++) {
if(target%i==0) {
cur.add(i);
get(target/i,i,cur,result);
cur.remove(cur.size()-1);
}
}
}
注意,没考虑第一个1*32,你单独写进去好了

【在 s***g 的大作中提到】
: printFactors(int n)
: input:32
: output:
: 1 * 32
: 2 * 16
: 2 * 2 * 8
: 2 * 2 * 2 * 4
: 2 * 2 * 2 * 2 * 2
: 2 * 4 * 4
: 4 * 8

s***g
发帖数: 1250
3
非常敢谢,我消化一下

result

【在 l*****a 的大作中提到】
: List> func(int n) {
: List> result= new ArrayList>();
: List cur=new ArrayList<>();
: get(n,2,cur,result);
: return result;
: }
: public get(int target,int start,List cur,List> result
: ) {
: if(target==1) {
: result.add(new ArrayList(cur));

p*****p
发帖数: 379
4
需要memorization,不然复杂度似乎是O(n!)级的(不是很确定这个怎么算)

result

【在 l*****a 的大作中提到】
: List> func(int n) {
: List> result= new ArrayList>();
: List cur=new ArrayList<>();
: get(n,2,cur,result);
: return result;
: }
: public get(int target,int start,List cur,List> result
: ) {
: if(target==1) {
: result.add(new ArrayList(cur));

r****7
发帖数: 2282
5
递归就行了啊

【在 s***g 的大作中提到】
: printFactors(int n)
: input:32
: output:
: 1 * 32
: 2 * 16
: 2 * 2 * 8
: 2 * 2 * 2 * 4
: 2 * 2 * 2 * 2 * 2
: 2 * 4 * 4
: 4 * 8

r****7
发帖数: 2282
6
这个。。。没考虑到的东西略多啊

result

【在 l*****a 的大作中提到】
: List> func(int n) {
: List> result= new ArrayList>();
: List cur=new ArrayList<>();
: get(n,2,cur,result);
: return result;
: }
: public get(int target,int start,List cur,List> result
: ) {
: if(target==1) {
: result.add(new ArrayList(cur));

h**d
发帖数: 630
7
第一个32打不出来 后面的16 等等也会打不出来 因为循环到target/2就停了

result

【在 l*****a 的大作中提到】
: List> func(int n) {
: List> result= new ArrayList>();
: List cur=new ArrayList<>();
: get(n,2,cur,result);
: return result;
: }
: public get(int target,int start,List cur,List> result
: ) {
: if(target==1) {
: result.add(new ArrayList(cur));

p**p
发帖数: 742
8
暴力递归解法:
public List> printFactors(int n) {
List> result = new ArrayList>();
if(n <= 0) {
return result;
}
List trace = new ArrayList();
printFactorsHelper(n, trace, result);
return result;
}

private void printFactorsHelper(int n, List trace, List Integer>> result) {
List list = new ArrayList(trace);
if(list.isEmpty()) {
list.add(1);
}
list.add(n);
result.add(list);
for(int i = trace.isEmpty() ? 2 : trace.get(trace.size()-1); i <= n/
i; i++) {
if(n % i == 0) {
trace.add(i);
printFactorsHelper(n/i, trace, result);
trace.remove(trace.size()-1);
}
}
}
h**d
发帖数: 630
9
c++的
void findfactor(int n, int target,int start, vector > &result,
vector &group)
{
if(target == 1)
{
if(group.size()==1)
{
group.insert(group.begin(),1);
}
result.push_back(group);
return;
}
for(int i= start;i<=target;i++)
{
if(target%i==0)
{
group.push_back(i);
findfactor(n, target/i, i, result, group);
group.pop_back();
}
}
}

【在 s***g 的大作中提到】
: printFactors(int n)
: input:32
: output:
: 1 * 32
: 2 * 16
: 2 * 2 * 8
: 2 * 2 * 2 * 4
: 2 * 2 * 2 * 2 * 2
: 2 * 4 * 4
: 4 * 8

f*********0
发帖数: 17
10
函数参数有了target还要n干嘛?
另外这应该是指数级复杂度的吧?
void recur(int n, int m, vector > &results, vector &result)
{
//if (m > n) return;
if (n == 1) {
results.push_back(result);
return;
}
for (int i = m; i <= n; ++i) {
if (n%i == 0) {
result.push_back(i);
recur(n/i, i, results, result);
result.pop_back();
}
}
}
vector > printFactors(int n) {
vector > results = {{1,32}};
recur(n, 2, results, result);
return results;
}

【在 h**d 的大作中提到】
: c++的
: void findfactor(int n, int target,int start, vector > &result,
: vector &group)
: {
: if(target == 1)
: {
: if(group.size()==1)
: {
: group.insert(group.begin(),1);
: }

l*****a
发帖数: 14598
11
en,那个/2画蛇添足了,拿掉就好

【在 h**d 的大作中提到】
: 第一个32打不出来 后面的16 等等也会打不出来 因为循环到target/2就停了
:
: result

1 (共1页)
进入JobHunting版参与讨论
相关主题
请教一下subset I 输出子集顺序问题leetcode的3sum的运行时间问题
一道L题请教leetcode上的那道Word Break II,多谢!
问个java小白问题问个fb onsite题目
怎么改List>的值?问一个java generic的问题
讨论一个g题被gray code打击了
permutationII ,如果不用hashset,用迭代的方法,如何防止重复请教leetcode Combination Sum II的code,谢谢。
发个L家面经,攒rp请教leetcode Subsets II
[cloudera面试] senior engineercombination sum II
相关话题的讨论汇总
话题: list话题: integer话题: int话题: result话题: vector