Skip to content

Commit 00dbcac

Browse files
committed
feat: add rust solution to lcci problem: No.08.01
No.08.01.Three Steps Problem
1 parent 3753740 commit 00dbcac

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

lcci/08.01.Three Steps Problem/README.md

+43
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,27 @@ var waysToStep = function (n) {
9292
};
9393
```
9494

95+
### **C**
96+
97+
```c
98+
int waysToStep(int n)
99+
{
100+
if (n < 3)
101+
{
102+
return n;
103+
}
104+
int a = 1, b = 2, c = 4, i = 4;
105+
while (i++ <= n)
106+
{
107+
int t = ((a + b) % 1000000007 + c) % 1000000007;
108+
a = b;
109+
b = c;
110+
c = t;
111+
}
112+
return c;
113+
}
114+
```
115+
95116
### **C++**
96117
97118
```cpp
@@ -113,4 +134,26 @@ public:
113134
};
114135
```
115136

137+
### **Rust**
138+
139+
```rust
140+
impl Solution {
141+
pub fn ways_to_step(n: i32) -> i32 {
142+
let mut dp = [1, 2, 4];
143+
let n = n as usize;
144+
if n <= 3 {
145+
return dp[n - 1];
146+
}
147+
for _ in 3..n {
148+
dp = [
149+
dp[1],
150+
dp[2],
151+
(((dp[0] + dp[1]) % 1000000007) + dp[2]) % 1000000007,
152+
];
153+
}
154+
dp[2]
155+
}
156+
}
157+
```
158+
116159
<!-- tabs:end -->

lcci/08.01.Three Steps Problem/README_EN.md

+43
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,27 @@ var waysToStep = function (n) {
8686
};
8787
```
8888

89+
### **C**
90+
91+
```c
92+
int waysToStep(int n)
93+
{
94+
if (n < 3)
95+
{
96+
return n;
97+
}
98+
int a = 1, b = 2, c = 4, i = 4;
99+
while (i++ <= n)
100+
{
101+
int t = ((a + b) % 1000000007 + c) % 1000000007;
102+
a = b;
103+
b = c;
104+
c = t;
105+
}
106+
return c;
107+
}
108+
```
109+
89110
### **C++**
90111
91112
```cpp
@@ -107,4 +128,26 @@ public:
107128
};
108129
```
109130

131+
### **Rust**
132+
133+
```rust
134+
impl Solution {
135+
pub fn ways_to_step(n: i32) -> i32 {
136+
let mut dp = [1, 2, 4];
137+
let n = n as usize;
138+
if n <= 3 {
139+
return dp[n - 1];
140+
}
141+
for _ in 3..n {
142+
dp = [
143+
dp[1],
144+
dp[2],
145+
(((dp[0] + dp[1]) % 1000000007) + dp[2]) % 1000000007,
146+
];
147+
}
148+
dp[2]
149+
}
150+
}
151+
```
152+
110153
<!-- tabs:end -->
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
impl Solution {
2+
pub fn ways_to_step(n: i32) -> i32 {
3+
let mut dp = [1, 2, 4];
4+
let n = n as usize;
5+
if n <= 3 {
6+
return dp[n - 1];
7+
}
8+
for _ in 3..n {
9+
dp = [
10+
dp[1],
11+
dp[2],
12+
(((dp[0] + dp[1]) % 1000000007) + dp[2]) % 1000000007,
13+
];
14+
}
15+
dp[2]
16+
}
17+
}

0 commit comments

Comments
 (0)