博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用最小花费爬楼梯 (LeetCode - 746)
阅读量:4047 次
发布时间:2019-05-25

本文共 1963 字,大约阅读时间需要 6 分钟。

描述

你需要爬上一个N层的楼梯,在爬楼梯过程中,每阶楼梯需花费非负代价,第i阶楼梯花费代价表示为cost[i],一旦你付出了代价,你可以在该阶基础上往上爬一阶或两阶。你可以从第0阶或者第1阶开始,请找到到达顶层的最小的代价是多少

N和cost[i]皆为整数,且N∈[2,1000],cost[i]∈[0,999]

输入

输入为一行整数,对应cost数组

输出

输出一个整数,表示花费的最小代价

输入样例 1 

1 100 1 1 1 100 1 1 100 1

输出样例 1

6

解释: 最低花费方式是从cost[0]开始,逐个经过那些1,跳过cost[3],一共花费6。

输入样例 2 

10 15  20

输出样例 2

15

解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。

方法一:dp[i]中存储的是到达i-1和i-2中最少的花费

例如样例1:1 100 1 1 1 100 1 1 100 1

dp[0]和dp[1]是可以直接出发的点,所以在他们之前的最少花费为0.

dp[0]=0   dp[1]=0 ;

dp[2]中要存储到达0和1中最少的花费:dp[0]+cost[0]=0+1=1, dp[1]+cost[1]=0+100=100, 所以dp[2]=1;

dp[3]中要存储到达1和2中最少的花费:dp[1]+cost[1]=0+100=100, dp[2]+cost[2]=1+1=2, 所以dp[3]=2;

dp[4]中要存储到达2和3中最少的花费:dp[2]+cost[2]=1+1=2, dp[3]+cost[3]=2+1=3, 所以dp[4]=2;

dp[5]中要存储到达3和4中最少的花费:dp[3]+cost[3]=2+1=3, dp[4]+cost[4]=2+1=3, 所以dp[5]=3;

dp[6]中要存储到达4和5中最少的花费:dp[4]+cost[4]=2+1=3, dp[5]+cost[5]=3+100=103, 所以dp[6]=3;

dp[7]中要存储到达5和6中最少的花费:dp[5]+cost[5]=3+100=103, dp[6]+cost[6]=3+1=4, 所以dp[7]=4;

dp[8]中要存储到达6和7中最少的花费:dp[6]+cost[6]=3+1=4, dp[7]+cost[7]=4+1=5, 所以dp[8]=4;

dp[9]中要存储到达7和8中最少的花费:dp[7]+cost[7]=4+1=5, dp[8]+cost[8]=4+100=104, 所以dp[9]=5;

dp[10]中要存储到达8和9中最少的花费:dp[8]+cost[8]=4+100=104, , dp[9]+cost[9]=5+1=6, 所以dp[10]=6;

class Solution {    public int minCostClimbingStairs(int[] cost) {        int[] dp=new int[10000];        dp[0]=0;        dp[1]=0;        for(int i=2;i

方法二:dp[i]中存储的是到达i的最低花费

dp[0]最低花费即为cost[0] , dp[1]最低花费即为cost[1].

dp[0]=1, dp[1]=100

dp[2] = dp[0]和dp[1]中的最低花费 + cost[2] = dp[0]+1=2

dp[3] = dp[1]和dp[2]中的最低花费 + cost[3] = dp[2]+1=3

dp[4] = dp[2]和dp[3]中的最低花费 + cost[4] = dp[2]+1=3

dp[5] = dp[3]和dp[4]中的最低花费 + cost[5] = dp[3]+100=dp[4]+100=103

dp[6] = dp[4]和dp[5]中的最低花费 + cost[6] = dp[4]+1=4

dp[7] = dp[5]和dp[6]中的最低花费 + cost[7] = dp[6]+1=5

dp[8] = dp[6]和dp[7]中的最低花费 + cost[8] = dp[6]+100=104

dp[9] = dp[7]和dp[8]中的最低花费 + cost[9] = dp[7]+1=6

class Solution {    public int minCostClimbingStairs(int[] cost) {        int[] dp=new int[10000];        dp[0]=cost[0];        dp[1]=cost[1];        for(int i=2;i

 

转载地址:http://sszci.baihongyu.com/

你可能感兴趣的文章
hdu 1285 确定比赛名次 拓扑排序模板题 优先队列
查看>>
poj 1797 Heavy Transportation 最小生成树 最大生成树
查看>>
hdu 1102 Constructing Roads 最小生成树Kruskal
查看>>
hdu 2489 Minimal Ratio Tree 最小生成树kruskal
查看>>
hdu 3790 最短路径问题 最短路Dijkstra
查看>>
hrbust 1339 Touring 最短路Dijkstra 邻接表
查看>>
UVA 4855 Hyper Box 斐波那契
查看>>
UVA 4857 Halloween Costumes 区间背包
查看>>
poj 2955 Brackets 括号匹配 区间dp
查看>>
hdu 2082 找单词 母函数
查看>>
HLG 2057 字典树 map
查看>>
SimpleDateFormat使用详解 java
查看>>
poj 1860 Currency Exchange 3259 Wormholes bellman 判环
查看>>
poj 1062 昂贵的聘礼 最短路bellman
查看>>
linux环境变量(转载)
查看>>
C语言中strlen与sizeof的区别(`$~新年快乐~$`!)
查看>>
struct msghdr与struct iovec
查看>>
编译和解释的区别是什么?
查看>>
unpv1 Makefile 文件 简略分析
查看>>
linux网络编程 UDP聊天程序 包括群聊和私聊
查看>>