【每日算法Day 79】所有人都会做的入门题,但是能看出你的代码能力!

简介: LeetCode 面试题 08.01. 三步问题

题目链接


LeetCode 面试题 08.01. 三步问题[1]

题目描述



image.png

示例1

输入:n = 3 输出:4解释:有四种走法

示例2

输入:n = 5输出:13

题解


这道题是动态规划入门题,我相信大家都会做,如果不会做,那就当我没说过这句话。


image.png

当然了这题太水了,我主要就是想看看大家会怎么实现呢?

代码


定义长度为N 的数组


最朴素的方法当然是定义长度为  的数组,然后算就完事了,代码如下:

typedeflonglongll;constllp=1e9+7;constintN=1e6+10;
classSolution {
public:   
llf[N] = {1, 2, 4}; 
intwaysToStep(intn) {     
for (inti=3; i<n; ++i) {    
f[i] = (f[i-1] +f[i-2] +f[i-3]) %p; 
        }      
returnf[n-1];
    }
};

定义四个变量


但是这样太费空间了啊,其实每次只需要用到之前的三个状态就行了,然后还要用个临时变量用来交换状态值,代码如下:

typedeflonglongll;constllp=1e9+7;
classSolution {
public:   
intwaysToStep(intn) { 
if (n==1) return1;  
if (n==2) return2;  
if (n==3) return4;    
lla=1, b=2, c=4, d;    
for (inti=3; i<n; ++i) {   
d= (a+b+c) %p;   
a=b;       
b=c;    
c=d;     
        }        
returnd; 
    }
};

定义长度为3的数组



image.png

typedeflonglongll;constllp=1e9+7;
classSolution {
public: 
intwaysToStep(intn) {    
llf[3] = {1, 2, 4};    
for (inti=3; i<n; ++i) {   
            (f[i%3] +=f[(i-1)%3] +f[(i-2)%3]) %=p;    
        }      
returnf[(n-1)%3]; 
    }
};

应读者要求,再来个 python 代码:

classSolution:   
defwaysToStep(self, n: int) ->int:    
f= [1, 2, 4]    
foriinrange(3, n):     
f[i%3] +=f[(i-1)%3] +f[(i-2)%3]   
f[i%3] %=1e9+7;     
returnint(f[(n-1)%3])

参考资料


[1]

LeetCode 面试题 08.01. 三步问题: https://leetcode-cn.com/problems/three-steps-problem-lcci/

image.png

简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~

相关文章
|
3天前
|
存储 Rust 监控
Rust代码编写高性能屏幕监控软件的核心算法
本文介绍了使用Rust编写的高性能屏幕监控软件的实现方法。核心算法包括:1) 使用`image`和`winit`库捕获并转换屏幕图像;2) 对图像进行处理,检测特定对象或活动;3) 利用Rust的并发性并行处理多个帧以提高效率;4) 提取数据后,通过`reqwest`库自动提交到网站进行分析或存储。通过结合Rust的高性能和丰富的库,可构建满足各种需求的高效屏幕监控工具。
86 5
|
3天前
|
机器学习/深度学习 算法 API
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
【Paddle】PCA线性代数基础 + 领域应用:人脸识别算法(1.1w字超详细:附公式、代码)
8 0
|
3天前
|
算法 关系型数据库 C语言
卡尔曼滤波简介+ 算法实现代码(转)
卡尔曼滤波简介+ 算法实现代码(转)
20 4
|
3天前
|
运维 算法
基于改进遗传算法的配电网故障定位(matlab代码)
基于改进遗传算法的配电网故障定位(matlab代码)
|
3天前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
|
3天前
|
算法
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
|
3天前
|
算法
基于蜣螂优化算法DBO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
基于蜣螂优化算法DBO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
|
3天前
|
算法
基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
|
3天前
|
算法 调度 决策智能
基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理(matlab代码)
基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理(matlab代码)
|
3天前
|
机器学习/深度学习 算法 数据挖掘
基于改进ISODATA算法的负荷场景曲线聚类(matlab代码)
基于改进ISODATA算法的负荷场景曲线聚类(matlab代码)