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。 大牛们能给点思路吗?谢谢
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
4 楼
List
- > func(int n) {
List
- > result= new ArrayList
- >();
List
get(n,2,cur,result);
return result;
}
public get(int target,int start,List
- > result
) {
if(target==1) {
result.add(new ArrayList
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
m*a
7 楼
还是辣娃好, 美女挺胸而出, 就好了。
p*p
8 楼
需要memorization,不然复杂度似乎是O(n!)级的(不是很确定这个怎么算)
result
【在 l*****a 的大作中提到】
: List
result
【在 l*****a 的大作中提到】
: List
- > func(int n) {
: List
- > result= new ArrayList
- >();
: List
: get(n,2,cur,result);
: return result;
: }
: public get(int target,int start,List
- > result
: ) {
: if(target==1) {
: result.add(new ArrayList
h*d
11 楼
p*p
12 楼
暴力递归解法:
public List
public List
- > printFactors(int n) {
List
- > result = new ArrayList
- >();
if(n <= 0) {
return result;
}
List
printFactorsHelper(n, trace, result);
return result;
}
private void printFactorsHelper(int n, List
List
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
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
void findfactor(int n, int target,int start, vector
vector
{
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
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);
: }
另外这应该是指数级复杂度的吧?
void recur(int n, int m, vector
{
//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
vector
recur(n, 2, results, result);
return results;
}
【在 h**d 的大作中提到】
: c++的
: void findfactor(int n, int target,int start, vector
: vector
: {
: if(target == 1)
: {
: if(group.size()==1)
: {
: group.insert(group.begin(),1);
: }
相关阅读
IBM是干什么的面试官说我Overqualify了,却仍给我了下一轮。求策略?facebook is also doing live video streaming被问及面完我们家,如果给offer还面其他家吗?该怎么回答?问一下pre-IPO公司的RSU的问题Google电面版主都干什么呢?不删贴吗?这是第几章?请教OPT的问题求hbk online test的题LA的工资和SF工资比例是多少【工作机会】EA Redwood Shores, CA hire SDETleetcode要准备收钱了吗?Slack怎么样?劈柴进狗狗是靠刷题么?NYT为老美马工训练厂鼓气,我们却给老中训练拆台 (转载)身居地下室,忧心万亿公司经营大计两个公司前后onsite政府工作还是private company, 真诚求教丑男多作怪