Skip to content

Commit fa60958

Browse files
committed
update multiple solution
1 parent 017fd8d commit fa60958

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

code/LeetCode/src/ClimbingStairs.java

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,87 @@ public static int climbStairs(int n) {
5151
return b;
5252
}
5353

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+
54123
public static void main(String[] args) {
55124
int n1 = 2;
56125
System.out.println("input: " + n1 + " climbStairs: " + climbStairs(n1));
57126
int n2 = 3;
58127
System.out.println("input: " + n2 + " climbStairs: " + climbStairs(n2));
59128
int n3 = 20;
60129
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));
61135
}
62136

63137

0 commit comments

Comments
 (0)