08_JumpFloor

题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路分析:
对于本题,前提只有 一次 1阶或者2阶的跳法。设总的跳法是f(n)
a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);
b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)
c.由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2)
d.然后通过实际的情况可以得出:只有一阶的时候 f(1) = 1 ,只有两阶的时候可以有 f(2) = 2
e.可以发现最终得出的是一个斐波那契数列

另:也可通过找规律的方法得出f(1)=1,f(2)=2,f(3)=3,f(4)=5,总结得出f(n)=f(n-1)+f(n-2)
所以,该题和com.hwx.swordToOffer._07_Fibonacci本质是一样的,即为输出第n个斐波那契序列,用循环不用递归

package com.hwx.swordToOffer._08_JumpFloor;
public class Solution {

	static int count = 0;// 表示共有多少种方式

	public static void main(String[] args) {
		System.out.println(JumpFloor(4));
	}

	/*
	 * 更好更准确的方式,斐波那契序列,循环迭代法
	 */
	public static int JumpFloor(int target) {
		if (target <= 0) {
			return 0;
		}
		if (target <= 2) {
			return target;// target为1时结果是1,为2时结果是2
		}
		int prePreJump =1;
		int preJump = 2;
		int result = 0;

		for (int i = 3; i <= target; i++) {
			result = prePreJump + preJump;
			prePreJump=preJump;
			preJump=result;
		}
		return result;
	}

	/*
	 * 我的方式,不大好觉得
	 */
	public static int JumpFloor2(int target) {
		// 到最后一步,只有剩余1个台阶或剩余0个台阶,不能再分解,直接count+1;
		// 如果还有2,则不能直接+1,因为2还是可以继续分解递归
		if (target == 1 || target == 0) {
			count++;
		} else {// 否则递归,分为两种递归
			JumpFloor(target - 1);
			JumpFloor(target - 2);
		}
		return count;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值