diff --git a/solution/0100-0199/0135.Candy/README.md b/solution/0100-0199/0135.Candy/README.md
index 4b8fd0ef26673..94d99c0474c76 100644
--- a/solution/0100-0199/0135.Candy/README.md
+++ b/solution/0100-0199/0135.Candy/README.md
@@ -203,6 +203,35 @@ function candy(ratings: number[]): number {
 }
 ```
 
+#### Rust
+
+```rust
+impl Solution {
+    pub fn candy(ratings: Vec<i32>) -> i32 {
+        let n = ratings.len();
+        let mut left = vec![1; n];
+        let mut right = vec![1; n];
+
+        for i in 1..n {
+            if ratings[i] > ratings[i - 1] {
+                left[i] = left[i - 1] + 1;
+            }
+        }
+
+        for i in (0..n - 1).rev() {
+            if ratings[i] > ratings[i + 1] {
+                right[i] = right[i + 1] + 1;
+            }
+        }
+
+        ratings.iter()
+            .enumerate()
+            .map(|(i, _)| left[i].max(right[i]) as i32)
+            .sum()
+    }
+}
+```
+
 #### C#
 
 ```cs
@@ -236,46 +265,4 @@ public class Solution {
 
 <!-- solution:end -->
 
-<!-- solution:start -->
-
-### 方法二
-
-<!-- tabs:start -->
-
-#### Java
-
-```java
-class Solution {
-    public int candy(int[] ratings) {
-        int n = ratings.length;
-        int up = 0;
-        int down = 0;
-        int peak = 0;
-        int candies = 1;
-        for (int i = 1; i < n; i++) {
-            if (ratings[i - 1] < ratings[i]) {
-                up++;
-                peak = up + 1;
-                down = 0;
-                candies += peak;
-            } else if (ratings[i] == ratings[i - 1]) {
-                peak = 0;
-                up = 0;
-                down = 0;
-                candies++;
-            } else {
-                down++;
-                up = 0;
-                candies += down + (peak > down ? 0 : 1);
-            }
-        }
-        return candies;
-    }
-}
-```
-
-<!-- tabs:end -->
-
-<!-- solution:end -->
-
 <!-- problem:end -->
diff --git a/solution/0100-0199/0135.Candy/README_EN.md b/solution/0100-0199/0135.Candy/README_EN.md
index a37b9e3a1bdb1..af62226fa2b1e 100644
--- a/solution/0100-0199/0135.Candy/README_EN.md
+++ b/solution/0100-0199/0135.Candy/README_EN.md
@@ -202,6 +202,35 @@ function candy(ratings: number[]): number {
 }
 ```
 
+#### Rust
+
+```rust
+impl Solution {
+    pub fn candy(ratings: Vec<i32>) -> i32 {
+        let n = ratings.len();
+        let mut left = vec![1; n];
+        let mut right = vec![1; n];
+
+        for i in 1..n {
+            if ratings[i] > ratings[i - 1] {
+                left[i] = left[i - 1] + 1;
+            }
+        }
+
+        for i in (0..n - 1).rev() {
+            if ratings[i] > ratings[i + 1] {
+                right[i] = right[i + 1] + 1;
+            }
+        }
+
+        ratings.iter()
+            .enumerate()
+            .map(|(i, _)| left[i].max(right[i]) as i32)
+            .sum()
+    }
+}
+```
+
 #### C#
 
 ```cs
@@ -235,46 +264,4 @@ public class Solution {
 
 <!-- solution:end -->
 
-<!-- solution:start -->
-
-### Solution 2
-
-<!-- tabs:start -->
-
-#### Java
-
-```java
-class Solution {
-    public int candy(int[] ratings) {
-        int n = ratings.length;
-        int up = 0;
-        int down = 0;
-        int peak = 0;
-        int candies = 1;
-        for (int i = 1; i < n; i++) {
-            if (ratings[i - 1] < ratings[i]) {
-                up++;
-                peak = up + 1;
-                down = 0;
-                candies += peak;
-            } else if (ratings[i] == ratings[i - 1]) {
-                peak = 0;
-                up = 0;
-                down = 0;
-                candies++;
-            } else {
-                down++;
-                up = 0;
-                candies += down + (peak > down ? 0 : 1);
-            }
-        }
-        return candies;
-    }
-}
-```
-
-<!-- tabs:end -->
-
-<!-- solution:end -->
-
 <!-- problem:end -->
diff --git a/solution/0100-0199/0135.Candy/Solution.rs b/solution/0100-0199/0135.Candy/Solution.rs
new file mode 100644
index 0000000000000..17ad371df3999
--- /dev/null
+++ b/solution/0100-0199/0135.Candy/Solution.rs
@@ -0,0 +1,25 @@
+impl Solution {
+    pub fn candy(ratings: Vec<i32>) -> i32 {
+        let n = ratings.len();
+        let mut left = vec![1; n];
+        let mut right = vec![1; n];
+
+        for i in 1..n {
+            if ratings[i] > ratings[i - 1] {
+                left[i] = left[i - 1] + 1;
+            }
+        }
+
+        for i in (0..n - 1).rev() {
+            if ratings[i] > ratings[i + 1] {
+                right[i] = right[i + 1] + 1;
+            }
+        }
+
+        ratings
+            .iter()
+            .enumerate()
+            .map(|(i, _)| left[i].max(right[i]) as i32)
+            .sum()
+    }
+}
diff --git a/solution/0100-0199/0135.Candy/Solution2.java b/solution/0100-0199/0135.Candy/Solution2.java
deleted file mode 100644
index 12695f93146a2..0000000000000
--- a/solution/0100-0199/0135.Candy/Solution2.java
+++ /dev/null
@@ -1,27 +0,0 @@
-class Solution {
-    public int candy(int[] ratings) {
-        int n = ratings.length;
-        int up = 0;
-        int down = 0;
-        int peak = 0;
-        int candies = 1;
-        for (int i = 1; i < n; i++) {
-            if (ratings[i - 1] < ratings[i]) {
-                up++;
-                peak = up + 1;
-                down = 0;
-                candies += peak;
-            } else if (ratings[i] == ratings[i - 1]) {
-                peak = 0;
-                up = 0;
-                down = 0;
-                candies++;
-            } else {
-                down++;
-                up = 0;
-                candies += down + (peak > down ? 0 : 1);
-            }
-        }
-        return candies;
-    }
-}
\ No newline at end of file