boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请问走楼梯的问题如何打印所有的路径。
相关主题
一道矩阵路径题
螺旋打印matrix
10分钟前T家电面面经
问一个graph题
问一个题
有重复元素的全排列,递归算法
Quick sort为什么需要logN的memory?
被google拒了~-。-
顺时针打印MxN矩阵的简洁递归解法
fibonacci recursion空间复杂度是多少 (转载)
相关话题的讨论汇总
话题: path话题: level话题: sum话题: len
进入JobHunting版参与讨论
1 (共1页)
s*****n
发帖数: 956
1
就是 n 级的楼梯,一次可以走1级,或者两级。打印出所有可能的走法。
我想用递归做,但是不知道该如何才能打印所有完整的走法。
应该是用什么保留一下以前的路径,该如何实现呢?请做过这个题目的帮我一下。 多
谢。
我大概思路是这样的:
void printLadderPath(int n)
{
if(n == 0)
{
   printf("\n")
   return;
}

// start with 1
if(n >= 1)
{
  .......
printLadderPath(n - 1); // recursively call
}

// start with 2
if(n >= 2)
{
........
printLadderPath(n - 2); //
g****n
发帖数: 431
2
一个更简单的办法:
设m=n/2,则最多可以走m个2级楼梯。然后遍历i = from 0 to m,为走2级楼梯的数目
。对于每个i,题目变成了在n个元素的数组中任意摆放i个元素(2级楼梯)。这个子问题可以很容易用in-
place的循环实现。

【在 s*****n 的大作中提到】
: 就是 n 级的楼梯,一次可以走1级,或者两级。打印出所有可能的走法。
: 我想用递归做,但是不知道该如何才能打印所有完整的走法。
: 应该是用什么保留一下以前的路径,该如何实现呢?请做过这个题目的帮我一下。 多
: 谢。
: 我大概思路是这样的:
: void printLadderPath(int n)
: {
: if(n == 0)
: {
:    printf("\n")

f*********5
发帖数: 576
3
void printLadderPath(int[] path,int len,int level)
{
for (i=0,sum=0;i {
sum+=path[level];
}
if (sum==len) {printf; return;}
if(sum<=len-1)
{
path[level]=1; printLadderPath(path,len,++level); level--;
}
if(sum<=len-2)
{
path[level]=2; printLadderPath(path,len,++level); level--;
}
}
main()
{
printLadderPath(path,100,0);
}

【在 s*****n 的大作中提到】
: 就是 n 级的楼梯,一次可以走1级,或者两级。打印出所有可能的走法。
: 我想用递归做,但是不知道该如何才能打印所有完整的走法。
: 应该是用什么保留一下以前的路径,该如何实现呢?请做过这个题目的帮我一下。 多
: 谢。
: 我大概思路是这样的:
: void printLadderPath(int n)
: {
: if(n == 0)
: {
:    printf("\n")

s*****n
发帖数: 956
4
这个什么时候打印出全部路径?

【在 f*********5 的大作中提到】
: void printLadderPath(int[] path,int len,int level)
: {
: for (i=0,sum=0;i: {
: sum+=path[level];
: }
: if (sum==len) {printf; return;}
: if(sum<=len-1)
: {
: path[level]=1; printLadderPath(path,len,++level); level--;

f*********5
发帖数: 576
5
这个???
你自己思考一下什么时候应该打印
用visual studio自己调试运行一下。。

【在 s*****n 的大作中提到】
: 这个什么时候打印出全部路径?
s*****n
发帖数: 956
6
非常感谢。现在我知道在这里打印就OK了。
if (sum==len)
{
for(i = 0; i < level; i++)
printf("%d ", path[i]);
printf("\n");
return;
}
顺便提一下, 这里有个小bug,调了几次才发现。
sum+=path[level]; --->> sum+=path[i];

【在 f*********5 的大作中提到】
: 这个???
: 你自己思考一下什么时候应该打印
: 用visual studio自己调试运行一下。。

1 (共1页)
进入JobHunting版参与讨论
相关主题
fibonacci recursion空间复杂度是多少 (转载)
career cup上面一题递归求解
面试官非常反感recursion吗?
Careercup上看到的一个google的题目 下面有个人回复很好玩
(求推荐)recursion以及把recursion转变为iteration的资料
问一个递归的问题
问CareerCup(第四版)一题的高效做法,谢谢!
用了递归以后,怎么计算空间复杂度?
递归多少层会stackoverflow?
关于尾递归
相关话题的讨论汇总
话题: path话题: level话题: sum话题: len