leetcode #70 계단 오르기 | 문제 푸는 길 두 번째 역 - 동적 기획 관련 문제

제목 70
문제 설명
만약 네가 계단을 오르고 있다면.n 단계가 있어야 옥상에 도착할 수 있습니다.
매번 너는 한 계단이나 두 계단을 올라갈 수 있다.너는 옥상까지 올라갈 수 있는 몇 가지 다른 방법이 있니?
주의: n을 정하는 것은 정수입니다.
예1:
  : 2
  : 2
  :            。
1.  1   + 1  
2.  2  

예 2:
  : 3
  : 3
  :            。
1.  1   + 1   + 1  
2.  1   + 2  
3.  2   + 1  

 
문제풀이 사고방식-동적 기획
이 문제는 비교적 간단하다. n번째 계단에 대해 말하자면 두 가지 도착 방식이 있을 수 있다.
1 - n - 1계단을 지나 1계단을 올라가면 도착한다.
2-n-2계단을 지나 2단계를 올라가면 도착한다.
만약 우리가 n-1계단에 도달하는 것과 n-2계단에 도달하는 다른 방법수를 알고 있다면, 둘을 더하면 n계단에 도달하는 다른 방법수다.
문제는 다음과 같습니다.
1 - 첫 번째 계단에 도착하는 방법은 모두 1가지가 있다.
2 - 두 번째 계단에 도착하는 방법은 모두 두 가지가 있다.
그룹 ans[i]를 i번째 계단에 도착하는 다른 방법의 개수에 저장하려면
ans[ 1 ] = 1;
ans[ 2 ] = 2;
3 <=i <=n 시,
ans[ i ] = ans[ i - 1 ] + ans[ i - 2 ].
 
코드는 다음과 같습니다.
class Solution {
public:
	int climbStairs(int n) {
		if (n == 1) return 1;
		vector ans(n+1);
		ans[1] = 1;
		ans[2] = 2;
		for (int i = 3; i <= n; i++) {
			ans[i] = ans[i - 1] + ans[i - 2];
		}
		return ans[n];
	}
};

시간 복잡도: O(n)
공간 복잡성: O(n)
 

좋은 웹페이지 즐겨찾기