【每日算法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知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~

相关文章
|
1月前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
232 1
|
1月前
|
算法 安全 C语言
使用C语言实现DES算法代码
使用C语言实现DES算法代码
|
1月前
|
机器学习/深度学习 存储 缓存
数据结构从入门到精通——算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度是评估算法性能的两个重要指标。时间复杂度主要关注算法执行过程中所需的时间随输入规模的变化情况,而空间复杂度则关注算法执行过程中所需的最大存储空间或内存空间。
71 0
|
1月前
|
搜索推荐 算法 C语言
C语言选择排序算法,从入门到精通只需1秒!
C语言选择排序算法,从入门到精通只需1秒!
|
1月前
|
算法 前端开发
|
23天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
1月前
|
机器学习/深度学习 算法 Python
傅里叶变换算法和Python代码实现
傅立叶变换是物理学家、数学家、工程师和计算机科学家常用的最有用的工具之一。本篇文章我们将使用Python来实现一个连续函数的傅立叶变换。
30 8
|
7天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
18 3
|
7天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
12 3
|
7天前
|
算法
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
30 1