矩形覆盖 java

矩形覆盖

http://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6

只考虑 有n个1,n个2 这(1,2)两个数字怎么组合最后相加的和为target,可转换为兔子跳台阶,一次可跨1步或2步。
f(0)=0;
f(1)=1;
f(2)=2;
f(3)=f(1)+f(2)
f(n)=f(n-1)+f(n-2);
可以使用递归
也可以把组合的结果保存在一个链表中

 public int RectCover(int target) {
       /* 
       //递归
       if(target<0){
            throw new IllegalArgumentException("输入的数应大于0");
        }
        if(target==1||target==2||target==0){
            return target;
        }
        return RectCover(target-1)+RectCover(target-2);*/

        //非递归
        if(target<0){
            throw new IllegalArgumentException("输入的数应大于0");
        }

        if(target<3){
            return target;
        }else{
            int res;
            int n=3;
            ArrayList<Integer> resl = new ArrayList<>();
            resl.add(0);
            resl.add(1);
            resl.add(2);
            while (n<=target){
                resl.add(resl.get(n-1)+resl.get(n-2));
                n+=1;
            }
            return resl.get(target);
        }
    }
全部评论

相关推荐

头像
03-18 09:09
Java
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务