牛客网-剑指offer

来源:互联网 发布:excel 下拉数据递增 编辑:程序博客网 时间:2024/05/22 12:43

该部分主要是对递归的一个应用,同样也可以作为动态规划的基础题目去思考。

1、跳台阶

/**  *  * @author 崔洪振367 * @version 创建时间:2017年6月28日 下午9:24:40  */public class 跳台阶 {public int JumpFloor(int target) {if(target == 1){return 1;}if(target ==0){return 0;}if(target == 2){return 2;}return JumpFloor(target-1) + JumpFloor(target-2);    }}

2、斐波那契数列

/** *  * @author 崔洪振367 * @version 创建时间:2017年6月28日 下午9:11:03 */public class 斐波那契数列 {//public int Fibonacci(int n) {////// 利用递归来实现//if (n <= 0) {//return 0;//}////if (n == 1) {//return 1;//}//return Fibonacci(n - 1) + Fibonacci(n - 2);////}public int Fibonacci2(int n) {// 利用循环来实现if(n <=0){return 0;}if(n == 1){return 1;}int a = 0; int b = 1;int sum = 0;for(int i=2; i<=n; i++){sum = a+b;a = b;b = sum;}return sum;}}

3、变态跳台阶

/** *  * @author 崔洪振367 * @version 创建时间:2017年6月29日 下午3:38:16 */public class 变态跳台阶 {//通过递归来实现变态跳台阶public int JumpFloorII(int target) {if(target == 0){return 1;}if(target == 1){return 1;}return 2*JumpFloorII(target-1);}////可以通过迭代来实现变态跳台阶//public int JumpFloorII1(int target){//if(target == 0) {//            return 0;//        }//         //        int[] dp = new int[target + 1];//        dp[0] = 1;//        dp[1] = 1;//         //        for(int i = 2;i <= target;i++) {//            dp[i] = 0;//            for(int j = 0;j < i;j++) {//                dp[i] += dp[j];//            }//        }//         //        return dp[target];//}}

4、矩形覆盖

解决此题的思路:可以试着找出1-4之间的覆盖情况,然后可以发现:后一个覆盖情况是前两个覆盖情况的变种。在前一种覆盖方式和一个2*1的组合。

package 剑指offer;/** *  * @author 崔洪振367 * @version 创建时间:2017年6月29日 下午4:05:19 */public class 矩形覆盖 {//我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。//请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?public int RectCover(int target) {if(target == 0){return 0;}if(target == 1 || target == 2){return target;}return RectCover(target-1) + RectCover(target-2);}}

原创粉丝点击