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?
large data TLE
递归解法的时间复杂度为:O(2^lgn), 故当n逐渐变大时,由于计算重复解,时间复杂度呈指数级增长
1 public int climbStairs(int n) { 2 // Start typing your Java solution below 3 // DO NOT write main() function 4 if(n <= 0){ 5 return 0; 6 } 7 if(n == 1){ 8 return 1; 9 } 10 if(n == 2){ 11 return 2; 12 } 13 14 return climbStairs(n-1) + climbStairs(n-2); 15 }
bottom up
时间复杂度:O(n)
1 public int climbStairs(int n) { 2 // Start typing your Java solution below 3 // DO NOT write main() function 4 int[] data = new int[n + 1]; 5 data[0] = 0; 6 data[1] = 1; 7 if(n >= 2){ 8 data[2] = 2; 9 } 10 for(int i = 3; i <= n; i++){ 11 data[i] = data[i-1] + data[i-2]; 12 } 13 return data[n]; 14 }