[Leetcode70]爬樓梯
阿新 • • 發佈:2018-12-13
假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?注意:給定 n 是一個正整數。
這道題主要是找規律。這道題的規律比較簡單,首先是把n除以2確定排列組合中最多可以出現幾次2,然後將分別求出每種不同2的個數的排列組合有多少種可能。
舉個例子,當n=9時,9/2=4餘1。所以方案中2出現的個數可以是0、1、2、3、4共五種,而每種裡2出現的位置為,其中i為2的個數。所以一共有N = 55種可能。
python:
class Solution(object): def climbStairs(self, n): """ :type n: int :rtype: int """ flag = n / 2 res = 1 for i in range(1,flag+1): c = i s = n - i z = s - 1 while i > 1: c *= (i - 1) s *= z i -= 1 z -= 1 res += (s / c) return res
C++比較麻煩點,需要給 i 另外複製一個值用於計算階乘,同時要講 s 的資料型別設為 double 防止溢位:
class Solution { public: int climbStairs(int n) { int flag = n / 2; double res = 1; for(int i = 1; i <= flag;i++){ int j = i; double c = j; double s = n - j; int z = s -1; while(j > 1){ c *= (j - 1); s *= z; j -= 1; z -= 1; } res += (s / c); } return res; } };