aboutsummaryrefslogtreecommitdiff
path: root/other/count_and_say.rs
diff options
context:
space:
mode:
Diffstat (limited to 'other/count_and_say.rs')
-rw-r--r--other/count_and_say.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/other/count_and_say.rs b/other/count_and_say.rs
new file mode 100644
index 0000000..55a1fec
--- /dev/null
+++ b/other/count_and_say.rs
@@ -0,0 +1,32 @@
+struct Solution;
+
+impl Solution {
+ pub fn count_and_say(n: i32) -> String {
+ if n == 1 {
+ return "1".to_string();
+ }
+ let mut output: Vec<char> = vec![];
+ let mut last_char = ' ';
+ let mut count: u8 = '0' as u8;
+ for char in Solution::count_and_say(n - 1).chars().into_iter() {
+ if last_char == ' ' {
+ last_char = char;
+ count = '1' as u8;
+ } else if char == last_char {
+ count += 1;
+ } else {
+ output.push(count as char);
+ output.push(last_char);
+ last_char = char;
+ count = '1' as u8;
+ }
+ }
+ output.push(count as char);
+ output.push(last_char);
+ output.into_iter().collect()
+ }
+}
+
+fn main() {
+ print!("{}", Solution::count_and_say(4));
+}