![《剑指offer》71--跳台阶扩展问题[C++][C][Java][Kotlin][Rust],第1张 《剑指offer》71--跳台阶扩展问题[C++][C][Java][Kotlin][Rust],第1张](/aiimages/%E3%80%8A%E5%89%91%E6%8C%87offer%E3%80%8B71--%E8%B7%B3%E5%8F%B0%E9%98%B6%E6%89%A9%E5%B1%95%E9%97%AE%E9%A2%98%5BC%2B%2B%5D%5BC%5D%5BJava%5D%5BKotlin%5D%5BRust%5D.png)
跳台阶扩展问题_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/22243d016f6b47f2a6928b4313c85387?tpId=13&tags=&title=&difficulty=0&judgeStatus=0&rp=1
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路跳上 n-1 级台阶,可以从 n-2 级跳 1 级上去,也可以从 n-3 级跳 2 级上去...,那么
f(n-1) = f(n-2) + f(n-3) + ... + f(0)
同样,跳上 n 级台阶,可以从 n-1 级跳 1 级上去,也可以从 n-2 级跳 2 级上去... ,那么
f(n) = f(n-1) + f(n-2) + ... + f(0)
综上可得f(n) - f(n-1) = f(n-1)
即f(n) = 2*f(n-1)
所以 f(n) 是一个等比数列
【C++解法】1、递归
class Solution {
public:
int jumpFloorII(int target) {
if (target <= 0) return -1;
else if (target == 1) return 1;
else return 2 * jumpFloorII(target - 1);
}
};
2、位移
class Solution {
public:
int jumpFloorII(int target) {
if (target <= 0) return -1;
return 1<<(target-1);
}
};
3、指数
class Solution {
public:
int jumpFloorII(int number) {
if (target <= 0) return -1;
return (int)pow(2, number-1);
}
};
【C解法】
int jumpFloorII(int number ) {
if (number <= 0) {return -1;}
return 1 << (number - 1);
}
【Java解法】
public class Solution {
public int jumpFloorII(int target) {
if (target <= 0) {return -1;}
return 1 << (target - 1);
}
}
【Kotin解法】
object Solution {
fun jumpFloorII(number: Int): Int {
if (number <= 0) {return -1}
return 1 shl (number - 1)
}
}
【Rust解法】
struct Solution{
}
impl Solution {
fn new() -> Self {
Solution{}
}
pub fn jumpFloorII(&self, number: i32) -> i32 {
if (number <= 0) {return -1}
1 << (number - 1)
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)