70. Climbing Stairs(동적 계획 문제)
1053 단어 Leetcode
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?
Note: Given n will be a positive integer.
Solution
관건은 어떤 점프법이든 마지막 단계는 1이거나 2이다.
즉 n-1층에서 1step를 뛰거나 n-2층에서 2step를 뛴다.
f(n)=f(n-1)+f(n-2)
반복적으로 쓰는 방법은 매우 간단하다. 제출할 때 항상 Time Limit Exceed를 쓴다. 아래와 같다.
class Solution {
public:
int climbStairs(int n) {
//f(n)=f(n-1)+f(n-2)
if(n==1)return 1;
if(n==2)return 2;
return climbStairs(n-1)+climbStairs(n-2);
}
};
비귀속 알고리즘을 하나 더 쓰다.
class Solution {
public:
int climbStairs(int n) {
if(n==1)return 1;
if(n==2)return 2;
int s1=2;// s-1
int s2=1;// s-2
int result;
for(int i=3;i<=n;i++)
{
result=s1+s2;
s2=s1;
s1=result;
}
return result;
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II경로 총 II 제목 요구 사항 문제풀이 두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다. 설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다. 예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.