爬楼梯算法的数学思路

今日腾讯实习面试,问到一题算法。

爬楼梯问题:一个楼梯一共n个台阶,一次上1或者2个台阶。问,一共多少种解法。

这个问题,当时学递归的时候,我记得做过。但是已经一年半没写过递归和动态规划。所以,第一反应是用数学思路解决。

数学的想法是这样的:

n已知

我们创建一个列表存放执行的步骤:

比如,有三个台阶。

**[1,1,1]**代表,我们每次走一个台阶,完成这个任务。

**[1,2]**代表,先走1个台阶,再走2个台阶。完成任务。

**[2,1]**代表,先走2个台阶,再走1个台阶。完成任务。

当已知的台阶数为n, 自然就有下面的想法。

[ n个1 ] 意为走了n个1完成任务

[ n-1 个 1; 1 个 2 ] 意为走了n-1个1, 走了一个2完成任务。

[ n-2 个 1; 2 个 2 ] 意为走了n-2个1, 走了两个2完成任务。

一个重要的点是:

当我们采用走了n-1个1,和一个2时,它的方法总数其实应该是:

意为: 将1个2放到n-1个1中。

所以最后的结果应该为:

所有的和为:

sum = 1 + Cnk(n-1, 1) + Cnk(n-2, 2) + … Cnk(n/2 , n/2) 偶数情况。

sum = 1 + Cnk(n-1, 1) + Cnk(n-2, 2) + … Cnk(n//2 + 1 , n//2 - 1) 奇数情况。

注: n//2 为: 用n整除2, 然后取得的数向下取整。 (2.1取2, 2.9取2)

代码如下:

def computer(n):

all_ways = 1

if n % 2 == 0:

stop_num = int(n / 2)

for i in range(1, stop_num + 1):

all_ways += Cnk(n - i, i)

if n % 2 == 1:

stop_num = (n // 2) + 1

for i in range(1, stop_num + 1):

all_ways += Cnk(n - i, i)

return all_ways

def Cnk(n, k):

value1 = 1

for i in range(k):

value1 = value1 * (n - i)

value2 = 1

for i in range(1, k + 1):

value2 = value2 * i

ans = value1 / value2

return ans

def main():

n = 6

ways = computer(n)

print(ways)

main()

因为当时只给了15min写代码,所以没有写出来。是我比较菜。这是我面试完之后花了30min左右补全的结果。

纪念人生第一次面试就凉凉的腾讯面试。

原文链接:https://blog.csdn.net/shangjun2018/article/details/105103994

python爬楼梯问题_爬楼梯算法的数学思路相关推荐

  1. python人人贷爬虫_爬取人人贷网上部分借贷信息以及数据可视化

    一.主题式网络爬虫设计方案:爬取人人贷网上部分借贷信息 1.主题式网络爬虫名称:爬取人人贷网上部分信息 2.主题式网络爬虫的内容与数据特征分析:爬取人人贷部分信息数据,借贷信息 3.主题式网络爬虫设计 ...

  2. 爬table数据_爬取NBA球员薪资数据【Python数据分析百例连载】

    通过Pandas模块也可以实现简单的爬虫.主要使用Pandas的read_html方法,该方法用于导入带有table标签的网页表格数据,语法如下: pandas.read_html(io,match= ...

  3. 爬虫python下载网站所有图片_爬取某图片网站多页图片的python爬虫

    1.[代码][Python]代码 # coding=utf-8 import requests import re from lxml import etree import time import ...

  4. python微博涨粉_爬取微博用户公开信息,分析为周杰伦打榜的夕阳红老年团,告诉你他们真实年龄!...

    前段时间为"周杰伦打榜"话题迅速登上微博热搜榜 因为cxk的粉丝们质疑周杰伦微博没有数据 (周杰伦没有开通微博) 于是,无数隐匿江湖多年 看不下去的周杰伦老年粉开始被迫营业 于是一 ...

  5. python爬豆瓣电视剧_爬取豆瓣热门电视剧.py

    import requests from fake_useragent import UserAgent import json import csv import pymongo import ra ...

  6. python数据结构与算法分析_数据结构与算法(Python版)

    为什么研究数据结构与算法 本周带大家进入Python版数据结构与算法的学习.想必大家都听过"算法"一词,算法的学习对编程者来说是至关重要的.首先我们先了解一下为什么要研究数据结构与 ...

  7. python ssd目标检测_目标检测算法之SSD的数据增强策略

    前言 这篇文章是对前面<目标检测算法之SSD代码解析>,推文地址如下:点这里的补充.主要介绍SSD的数据增强策略,把这篇文章和代码解析的文章放在一起学最好不过啦.本节解析的仍然是上篇SSD ...

  8. java 爬 维基百科_爬取维基百科词条

    python爬取维基百科词条,获得某词汇页面中释义段落的加粗词汇.链接词汇以及所爬词汇对应的分类,为自动构建同义词汇树准备数据. 以下代码可能为一次性代码,因为解析html靠的是标签的相对位置,维基百 ...

  9. r与python做随机森林_随机森林算法入门(python)

    昨天收到yhat推送了一篇介绍随机森林算法的邮件,感觉作为介绍和入门不错,就顺手把它翻译一下. 目录 1 什么是随机森林 1.1 集成学习 1.2 随机决策树 1.3 随机森林 1.4 投票 2 为什 ...

最新文章

  1. jQuery API之each、children、index的使用
  2. 走进SQL Server 2005:备份与恢复功能
  3. 超微服务器开机启动项目怎么设置,超微服务器启动项设置
  4. linux在文件或文件夹中查找字符串
  5. 【数据结构】分治代码模板
  6. asp.net安全身份验证
  7. 【Matlab学习笔记】【函数学习】max()和max(max())的区别
  8. 『杭电1891』Tough Water Level
  9. 软件工程师成长为架构师必备的十项技能
  10. IDEA技巧:如何根据注释生成swagger注解
  11. Redis的雪崩,击穿,穿透详解
  12. border缩写属性
  13. 2.6.4 调色板技术
  14. android百度地图公交路线,android百度地图api实现查询经过某站点的所有公交路线...
  15. 申请CSDN博客专家和码云推荐项目
  16. 英读廊——一个人的旅行:原汁原味希腊克里特游记
  17. 第7章概率和样本:样本均值的分布
  18. 谈谈商业合作中的“男人来自火星,女人来自金星”
  19. 生成统计图类pchart---中文翻译手册
  20. PHP--extract 从数组中将变量导入到当前的符号表

热门文章

  1. 零售企业如何快速开上千家门店,揭秘名创优品的低价超级产品战略
  2. 【JokerのZYNQ7020】FLASH_TEST。
  3. 【JokerのZYNQ7020】UART。
  4. flutter git 拉不起来_这些基础不牢固,我们的蛙泳就别想拉起来
  5. 计算机程序默认打开方式怎么选,电脑不能选择打开方式怎么办|打开方式无法选择的解决方法...
  6. view \function\行转列的方法。
  7. python阶乘函数_python 阶乘函数
  8. mysql无法在kvm虚拟机上_使用KVM虚拟机遇到的问题(持续更新)
  9. 微信二维码的生成(java后端)--邀请新人
  10. 数字时代,原创者应该如何借助区块链技术保护知识产权?