검지 Offer 9: 변태 점프

4149 단어 검지 Offer

Description


개구리 한 마리가 한 번에 1계단을 올라갈 수도 있고, 2계단을 올라갈 수도 있다.이 개구리가 n급 계단을 뛰어오르는 데는 모두 몇 가지 점프법이 있는지 구해 보세요.

Solution 1: Dynamic Programming


계단을 뛰어넘는 사고방식을 이어가면 우리는 여전히 DP로 이 문제를 해결할 수 있다.
//C++
   int jumpFloorII(int number) {
        int* dp = new int[number+1];
        dp[0] = 1;
        for(int i = 1; i < number + 1; ++i){
            dp[i] = 0;
            for(int j = 0; j < i; ++j){
                dp[i] += dp[j];
            }
        }
        int ans = dp[number];
        delete[] dp;
        return ans;
    }

Solution 2: Sum


위의 알고리즘이 i 이전의 모든 원소에 대한 구화이기 때문에 우리는 통항 공식을 미리 산출할 수 있다. 그러면 O(1)의 시간으로 답을 얻을 수 있다.관찰해 보면 사실 모든 항목이 2^n이기 때문에 (수귀는 정확성을 증명할 수 있다) 위치 연산을 하면 답을 얻을 수 있다.
//C++
   int jumpFloorII(int number) {
        return 1 << (--number);
    }

좋은 웹페이지 즐겨찾기