题解 | 跳台阶

跳台阶

https://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param number int整型 
 * @return int整型
 */

// // 记忆化搜索:缓存数组,大小为41(覆盖n=1~40的情况)
// int cache[41] = {0};

int jumpFloor(int number ) {
    // // 递归,时间复杂度为O(2^n),空间复杂度O(n)
    // if (number == 1) {
    //     return 1;
    // } else if (number == 2){
    //     return 2;
    // } else {
    //     return jumpFloor(number-1) + jumpFloor(number-2);
    // }



    // // 记忆化搜索,时间复杂度为O(n),空间复杂度O(n)
    // // 递归的优化版本,通过 缓存中间结果 避免重复计算
    // // 使用数组存储已计算的 f(n) 值
    // // 递归前检查缓存,缓存未命中时计算并存储
    // // 检查缓存是否命中
    // if (cache[number] != 0) {
    //     return cache[number];
    // }
    // // 基础情况
    // if (number == 1) {
    //     return cache[1] = 1;
    // }
    // if (number == 2) {
    //     return cache[2] = 2;
    // }
    // // 计算并缓存结果
    // return cache[number] = jumpFloor(number - 1) + jumpFloor(number - 2);
    
    
    
    // 动态规划,时间复杂度为O(n),空间复杂度O(1)
    // 自底向上计算,避免重复计算
    // 使用两个变量保存前两个状态 f(n−1) 和 f(n−2),无需额外数组
    // 从 n = 3 开始迭代计算,直到 n
    if (number == 1) {
        return 1;
    } else if (number == 2) {
        return 2;
    }

    int a = 1; // f(n-2),初始为 f(1)
    int b = 2; // f(n-1),初始为 f(2)
    int combination; // f(n)

    for (int i=3; i<=number; i++) {
        combination = a + b; // 计算 f(n)
        a = b; // 更新 f(n-2) 为 f(n-1)
        b = combination; // 更新 f(n-1) 为 f(n)
    }

    return combination;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 17:04
点赞 评论 收藏
分享
KKorz:是这样的,还会定期默写抽查
点赞 评论 收藏
分享
02-07 12:06
已编辑
华侨大学 测试开发
最近看到很多&nbsp;92&nbsp;的,甚至是硕士,开始往测开赛道卷,说实话有点看不懂。先把话说清楚,大厂里的测开,绝大多数时间干的还是测试的活,只是写点自动化脚本、维护测试平台、接接流水线,真正像开发一样做系统、做架构、做核心平台的测开少得可怜,基本都集中在核心提效组,而且人很少,外面进去的大概率轮不到你,我想真正干过人都清楚。很多人被洗脑了,以为测开也是开,和后端差不多,只是更简单、更轻松、还高薪。现实情况是,测开和开发的职业路径完全不一样。开发的核心是业务和系统能力,测开的核心是稳定性和覆盖率,前者是往上走,后者天花板非常明显。你可以见到很多开发转测开,但你很少见到干了几年测开还能顺利转回开发的。更现实一点说,92&nbsp;的高学历如果拿来做测开,大部分时间就是在做重复性很强的杂活,这种工作对个人能力的放大效应非常弱。三年下来,你和一个双非的,甚至本科的测开差距不会太大,但你和同龄的后端、平台开发差距会非常明显。这不是努不努力的问题,是赛道问题。所谓测开简单高薪,本质上是把极少数核心测开的上限,当成了整个岗位的常态来宣传。那些工资高、技术强的测开,本身就是开发水平,只是挂了个测开的名。普通人进去,99%&nbsp;做的都是项目兜底型工作,而不是你想象中的平台开发。测开不是不能做,但它绝对不是开发的平替,也不是性价比最优解。如果你是真的不想做开发,追求稳定,那测开没问题。但如果你只是觉得测开比后端容易,还能进大厂,那我劝你冷静一点,这只是在用短期安全感换长期天花板。有92的学历,如果你连测开这些重复性工作都能心甘情愿接受,那你把时间精力用在真正的开发、系统、业务深度上,回报大概率比卷测开要高得多。想清楚再下场,别被岗位名和话术带偏了,就算去个前端客户端也是随便占坑的,测开是一个坑位很少赛道,反而大面积学历下放,不用想也能知道会是什么结果,我想各位在JAVA那里已经看到了
小浪_Coding:工作只是谋生的手段 而不是相互比较和歧视
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务