LeetCode Climbing Stairs
来源:互联网 发布:财务付款流程优化 编辑:程序博客网 时间:2024/06/03 10:10
鄙人 刘天昊 csdn新用户 用博客来记录自己的学习过程也希望和网络上志同道合的朋友做一些交流
leetcode篇因为研究生本科都不是cs出生,所以自学数据结构,所有的leetcode都是C语言实现
今天换换胃口,来说一说一道自己觉得很funny的题目
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Note: Given n will be a positive integer.
说一个爬梯子的游戏,那你一次可以走1步或者两步(这里不可倒退就往上爬)说说思路,刚刚拿到这题,暴力枚举(没有思路),仔细想想不可能过的,那么思考如何减少枚举重复的数字。
在学校操场坐着想想我们可以倒着思考问题从上往下走
假设有5层,构建一个树,左子树减1右子树减2,当数==0时记录count++,<=0时返回,递归的去建立一个树可以减少枚举的数字
typedef struct Stack{ int data; struct Stack *next; int Size;}Stack;Stack *InitStack(){ Stack *stack=(Stack *)malloc(sizeof(Stack)); stack->next=NULL; stack->Size=0; return stack;}void PushStack(Stack *stack,int data){ Stack *node=(Stack *)malloc(sizeof(Stack)); node->data=data; node->Size=(stack->Size)++; node->next=stack->next; stack->next=node;}typedef struct Treenode{ int data; struct Treenode *left; struct Treenode *right;}Treenode;Treenode *InitTree(int data,Stack *stack){ Treenode *root; if(data<=0) { root=NULL; if(data==0) { PushStack(stack,0); } } else { root=(Treenode *)malloc(sizeof(Treenode)); root->data=data; root->left=InitTree(data-1,stack); root->right=InitTree(data-2,stack); } return root;}int climbStairs(int n) { Stack *stack=InitStack(); Treenode *root; root=InitTree(n,stack); int res=stack->Size; return res;}可惜这个到35的时候就超出内存限制了,于是我又陷入思考
接着又再草纸上发现这个规律--ok你仔细看看就很容易明白
这个问题发展成一个斐波那契数列问题我一激动写了个代码
int climbStairs(int n) { if(n<=2) { return n; } else { return climbStairs(n-1)+climbStairs(n-2); }}ok时间超出限制,我当时有点小懵逼,但是不久我就ok了
最后po上最后ac的代码也希望与大家分享这个思考问题的过程
int climbStairs(int n) { int a=1; int b=2; int c=0; if(n<=2) { return n; } else { for(int i=2;i<n;i++) { c=a+b; a=b; b=c; } } return c;}
图片
0 0
- LeetCode: Climbing Stairs
- LeetCode: Climbing Stairs
- [LeetCode]Climbing Stairs
- LeetCode Climbing Stairs
- [Leetcode] Climbing Stairs
- Leetcode: Climbing stairs
- LeetCode Climbing Stairs
- [LeetCode] Climbing Stairs
- leetcode 107: Climbing Stairs
- [LeetCode] Climbing Stairs
- [LeetCode]Climbing Stairs
- [leetcode]Climbing Stairs
- LeetCode-Climbing Stairs
- [leetcode] Climbing Stairs
- LeetCode - Climbing Stairs
- LeetCode:Climbing Stairs
- Leetcode Climbing Stairs
- LeetCode | Climbing Stairs
- 嵌入式软件开发的难点
- BZOJ 2423: [HAOI2010]最长公共子序列
- Visual GDB进行Android NDK开发,报错:error : undefined reference to '__android_log_print' 解决办法
- Linux连接oracle数据库
- 我理解的java-内存模型
- LeetCode Climbing Stairs
- 设计模式:算法封装(模板方法,策略)
- AAC ADTS格式分析
- JAVA开发之 24-JAVA的隐式转换与强制转换
- 浅谈Java中的异常机制有哪些—优就业
- Python Scipy Tutorials:Scipy(Image Operation)
- B.FRIENDit台式笔记本外接白色超薄静音防尘有线usb游戏办公巧克力键盘KB1430
- Spring Boot学习(三)
- 在 Linux 上给用户赋予指定目录的读写权限