最近学到动态规划,把写的代码题分享一下。
动态规划顾名思义,就是在处理任务的时候,任务的脉络不是预先被完全预料好的,需要在运算中
一步步推算的。
这么说可能很难理解它的特殊性我来举几个例子。
最著名的就是我们的青蛙跳台阶问题。(青蛙一次跳一或两阶,跳n阶有多少种跳法)
有的同学可能就开始混淆了,明明这个是经典的递归问题,类似斐波那契数列,怎么会扯上动态规划呢?
我们先看看一般解法:(递归)
逻辑大概是这样的,青蛙在跳第到n阶的时候,它可能是从n-1阶跳一阶上来的,也有可能是从n-2阶跳上来的。这样就将问题简单化。
接着进行递归,结束条件是n=1/2(负数几乎不可能)
代码如下:
public class FrogJump {
public static int jumpWays(int n) {
if (n <= 0) {
return 0;
}
if (n == 1) {
return 1;