@@ -51,13 +51,87 @@ public static int climbStairs(int n) {
51
51
return b ;
52
52
}
53
53
54
+ public static int climbStairsWithRecursion (int n ) {
55
+ if (n == 1 ) {
56
+ return 1 ;
57
+ } else if (n == 2 ) {
58
+ return 2 ;
59
+ } else {
60
+ return climbStairsWithRecursion (n - 1 ) + climbStairsWithRecursion (n - 2 );
61
+ }
62
+ }
63
+
64
+
65
+ public static int climbStairsWithRecursionMemory (int n ) {
66
+ int [] memoryArray = new int [n + 1 ];
67
+ return subClimbStairsWithRecursionMemory (n - 1 , memoryArray ) + subClimbStairsWithRecursionMemory (n - 2 , memoryArray );
68
+
69
+ }
70
+
71
+ public static int subClimbStairsWithRecursionMemory (int n , int [] memoryArray ) {
72
+ if (n == 1 ) {
73
+ return 1 ;
74
+ } else if (n == 2 ) {
75
+ return 2 ;
76
+ } else {
77
+ if (memoryArray [n ] > 0 ) {
78
+ return memoryArray [n ];
79
+ }
80
+ memoryArray [n ] = subClimbStairsWithRecursionMemory (n - 1 , memoryArray ) + subClimbStairsWithRecursionMemory (n - 2 , memoryArray );
81
+
82
+ return memoryArray [n ];
83
+ }
84
+ }
85
+
86
+ public static int climbStairsWithDynamic (int n ) {
87
+ if (n == 1 ) {
88
+ return 1 ;
89
+ }
90
+ int dynamicArray [] = new int [n + 1 ];
91
+ dynamicArray [1 ] = 1 ;
92
+ dynamicArray [2 ] = 2 ;
93
+ for (int i = 3 ; i <= n ; i ++) {
94
+ dynamicArray [i ] = dynamicArray [i - 1 ] + dynamicArray [i - 2 ];
95
+ }
96
+
97
+ return dynamicArray [n ];
98
+ }
99
+
100
+ public static int climbStairsWithFibonacci (int n ) {
101
+ if (n == 1 ) {
102
+ return 1 ;
103
+ }
104
+ int first = 1 ;
105
+ int second = 2 ;
106
+ for (int i = 3 ; i <= n ; i ++) {
107
+ int third = first + second ;
108
+ first = second ;
109
+ second =third ;
110
+ }
111
+
112
+ return second ;
113
+ }
114
+
115
+
116
+ public static int climbStairsWithFibonacciFormula (int n ) {
117
+ double sqrt5 = Math .sqrt (5 );
118
+ double fibn = Math .pow ((1 + sqrt5 ) / 2 , n + 1 ) - Math .pow ((1 - sqrt5 ) / 2 , n + 1 );
119
+ return (int )(fibn / sqrt5 );
120
+ }
121
+
122
+
54
123
public static void main (String [] args ) {
55
124
int n1 = 2 ;
56
125
System .out .println ("input: " + n1 + " climbStairs: " + climbStairs (n1 ));
57
126
int n2 = 3 ;
58
127
System .out .println ("input: " + n2 + " climbStairs: " + climbStairs (n2 ));
59
128
int n3 = 20 ;
60
129
System .out .println ("input: " + n3 + " climbStairs: " + climbStairs (n3 ));
130
+ System .out .println ("input: " + n3 + " climbStairsWithRecursion: " + climbStairsWithRecursion (n3 ));
131
+ System .out .println ("input: " + n3 + " climbStairsWithRecursionMemory: " + climbStairsWithRecursionMemory (n3 ));
132
+ System .out .println ("input: " + n3 + " climbStairsWithDynamic: " + climbStairsWithDynamic (n3 ));
133
+ System .out .println ("input: " + n3 + " climbStairsWithFibonacci: " + climbStairsWithFibonacci (n3 ));
134
+ System .out .println ("input: " + n3 + " climbStairsWithFibonacciFormula: " + climbStairsWithFibonacciFormula (n3 ));
61
135
}
62
136
63
137
0 commit comments