[leetcode] Climbing Stairs(계단 오르기 C 언어)

2553 단어 leetcode
Climbing Stairs You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 제목: 네가 계단을 오르려면 n개의 계단을 올라가야 한다. 너는 매번 한 개의 계단을 올라갈 수도 있고 두 개의 계단을 올라갈 수도 있다. 몇 가지 방법으로 n개의 계단을 다 올라갈 수 있느냐.문제 풀이 사고방식: 1.반복으로 실현하면 한 계단을 오르는 것은 단지 한 가지 방식일 뿐이고 두 계단을 오르는 것은 두 가지 방식(한 번에 두 계단을 건너고 한 번에 한 계단을 건너면)이 있다. 그러면 F(n)=F(n-1)+F(n-2)이다.효율이 낮아서 함수를 호출할 때마다 많은 시간을 소모하고 실행할 때 시간을 초과한다.2. for순환문구로 직접 실현하고 개수조를 정의하여 계단을 오르는 방식을 보존하는데 사용한다. 귀속 사고방식과 마찬가지로 a[n]=a[n-1]+a[n-2]는 귀속보다 효율이 좋다.C 언어 구현 코드는 다음과 같습니다.
반복 구현:
int digui(int n){
    if(n == 1){
        return 1;
    }
    if(n == 2){
        return 2;
    }
    return digui(n-1) + digui(n-2);
}
int climbStairs(int n) {
    return digui(n);
}

for 루프 구현:
int climbStairs(int n) {
    int i, a[999];
    if(n == 1) return 1;
    if(n == 2) return 2;
    a[0] = 0;a[1] = 1;a[2] = 2;
    for(i = 3;i <= n; i++){
        a[i] = a[i-1] + a[i-2];
    }
    return a[n];
}

좋은 웹페이지 즐겨찾기