Redian新闻
>
请教 print factors 这个题
avatar
s*g
2
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。 大牛们能给点思路吗?谢谢
avatar
W*t
3
网卡被啦哇黑了

【在 m**********a 的大作中提到】
: 但是台式机确可以上。
avatar
l*a
4
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

avatar
m*a
5
辣娃在不? 赔我一个笔记本算了

【在 W*****t 的大作中提到】
: 网卡被啦哇黑了
avatar
s*g
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));

avatar
m*a
7
还是辣娃好, 美女挺胸而出, 就好了。
avatar
p*p
8
需要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));

avatar
r*7
9
递归就行了啊

【在 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

avatar
r*7
10
这个。。。没考虑到的东西略多啊

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));

avatar
h*d
11
第一个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));

avatar
p*p
12
暴力递归解法:
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, ListInteger>> 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);
}
}
}
avatar
h*d
13
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

avatar
f*0
14
函数参数有了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);
: }

avatar
l*a
15
en,那个/2画蛇添足了,拿掉就好

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

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。