검지offer-계단 뛰기 & & 변태 계단 뛰기 & 직사각형 덮개

검지offer-계단 뛰기 & & 변태 계단 뛰기 & 직사각형 덮개


1. 계단 오르기


하하하, 차례차례 문제
class Solution {
public:
    int jumpFloor(int number) {
        if(number==1) 
            return 1;
        else if(number==2) 
            return 2;
        else {
            return jumpFloor(number-1)+jumpFloor(number-2);
        }
    }
};

2. 변태 계단 뛰기


이렇게 복잡함도 높은 AC, 666 Solution1:
class Solution {
public:
    int jumpFloorII(int number) {
        if(number==1)
            return 1;
        else if(number==2)
            return 2;
        else{
            int all=0;
            while(number>=2)
                all+=jumpFloorII(--number);
            return all+1;// 0 n , +1
        }
    }
};

Solution2: 웹 사이트 참조https://www.nowcoder.com/profile/3754286/codeBookDetail?submissionId=13753640n계단 때문에 첫 번째 단계는 n가지 점프법이 있다. 1계단 뛰기, 2계단 뛰기, n계단 뛰기 1계단 뛰기, n-1계단 뛰기, n-1계단 뛰기, n-2계단 뛰기, n-2계단 뛰기, n-2계단 뛰기, n-1계단 뛰기, n-1계단 뛰기, n-1계단 뛰기, n-1계단 뛰기, n-2계단 뛰기, n-2계단 뛰기, n-2계단 뛰기, n-2계단 뛰기, n-2계단 뛰기, n-2계단 뛰기
return  1<<--number;

뒤의 수학 법칙이야말로 정말 대단하다

3. 직사각형 덮어쓰기


본질적으로는 피보나치 액수열이지만 조금 다르다.처음엔 몰랐어.
class Solution {
public:
    int rectCover(int number) {
        int f=1,g=2;
        if(number==0)
            return 0;
        else if(number==1) 
            return f;
        else if(number==2)
            return g;
        while(1return g;
    }
};

좋은 웹페이지 즐겨찾기