From ad95cba8220e2a7c86362caeb76e1a4333e9c2b8 Mon Sep 17 00:00:00 2001 From: Mistivia Date: Sat, 6 Sep 2025 23:17:22 +0800 Subject: refactor --- .gitignore | 4 +- 0001/Cargo.lock | 7 ++++ 0001/Cargo.toml | 6 +++ 0001/src/main.rs | 25 +++++++++++++ 0002/Cargo.lock | 7 ++++ 0002/Cargo.toml | 6 +++ 0002/src/main.rs | 88 ++++++++++++++++++++++++++++++++++++++++++++ 0003/Cargo.lock | 7 ++++ 0003/Cargo.toml | 6 +++ 0003/src/main.rs | 34 +++++++++++++++++ 0004/Cargo.lock | 7 ++++ 0004/Cargo.toml | 6 +++ 0004/src/main.rs | 95 +++++++++++++++++++++++++++++++++++++++++++++++ 0005/Cargo.lock | 7 ++++ 0005/Cargo.toml | 6 +++ 0005/src/main.rs | 67 +++++++++++++++++++++++++++++++++ 0006/Cargo.lock | 7 ++++ 0006/Cargo.toml | 6 +++ 0006/src/main.rs | 40 ++++++++++++++++++++ 0009/Cargo.lock | 7 ++++ 0009/Cargo.toml | 6 +++ 0009/src/main.rs | 13 +++++++ 0013/Cargo.lock | 7 ++++ 0013/Cargo.toml | 6 +++ 0013/src/main.rs | 33 +++++++++++++++++ 0014/Cargo.lock | 7 ++++ 0014/Cargo.toml | 6 +++ 0014/src/main.rs | 30 +++++++++++++++ 0021/Cargo.lock | 7 ++++ 0021/Cargo.toml | 6 +++ 0021/src/main.rs | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ 0026/main.c | 27 ++++++++++++++ 0027/main.c | 11 ++++++ 0028/Cargo.lock | 7 ++++ 0028/Cargo.toml | 6 +++ 0028/src/main.rs | 20 ++++++++++ 0035/main.c | 27 ++++++++++++++ 0058/main.c | 21 +++++++++++ 0066/main.c | 38 +++++++++++++++++++ 0067/main.c | 73 ++++++++++++++++++++++++++++++++++++ 0069/main.c | 26 +++++++++++++ 0070/main.c | 15 ++++++++ c/0026/main.c | 27 -------------- c/0027/main.c | 11 ------ c/0035/main.c | 27 -------------- c/0058/main.c | 21 ----------- c/0066/main.c | 38 ------------------- c/0067/main.c | 73 ------------------------------------ c/0069/main.c | 26 ------------- c/0070/main.c | 15 -------- rust/Cargo.lock | 7 ---- rust/Cargo.toml | 6 --- rust/src/bin/p0001.rs | 25 ------------- rust/src/bin/p0002.rs | 49 ------------------------- rust/src/bin/p0003.rs | 34 ----------------- rust/src/bin/p0004.rs | 96 ------------------------------------------------ rust/src/bin/p0005.rs | 67 --------------------------------- rust/src/bin/p0006.rs | 40 -------------------- rust/src/bin/p0009.rs | 13 ------- rust/src/bin/p0013.rs | 33 ----------------- rust/src/bin/p0014.rs | 30 --------------- rust/src/bin/p0021.rs | 60 ------------------------------ rust/src/bin/p0028.rs | 20 ---------- rust/src/lib.rs | 1 - rust/src/list.rs | 40 -------------------- rust/src/main.rs | 3 -- 66 files changed, 928 insertions(+), 764 deletions(-) create mode 100644 0001/Cargo.lock create mode 100644 0001/Cargo.toml create mode 100644 0001/src/main.rs create mode 100644 0002/Cargo.lock create mode 100644 0002/Cargo.toml create mode 100644 0002/src/main.rs create mode 100644 0003/Cargo.lock create mode 100644 0003/Cargo.toml create mode 100644 0003/src/main.rs create mode 100644 0004/Cargo.lock create mode 100644 0004/Cargo.toml create mode 100644 0004/src/main.rs create mode 100644 0005/Cargo.lock create mode 100644 0005/Cargo.toml create mode 100644 0005/src/main.rs create mode 100644 0006/Cargo.lock create mode 100644 0006/Cargo.toml create mode 100644 0006/src/main.rs create mode 100644 0009/Cargo.lock create mode 100644 0009/Cargo.toml create mode 100644 0009/src/main.rs create mode 100644 0013/Cargo.lock create mode 100644 0013/Cargo.toml create mode 100644 0013/src/main.rs create mode 100644 0014/Cargo.lock create mode 100644 0014/Cargo.toml create mode 100644 0014/src/main.rs create mode 100644 0021/Cargo.lock create mode 100644 0021/Cargo.toml create mode 100644 0021/src/main.rs create mode 100644 0026/main.c create mode 100644 0027/main.c create mode 100644 0028/Cargo.lock create mode 100644 0028/Cargo.toml create mode 100644 0028/src/main.rs create mode 100644 0035/main.c create mode 100644 0058/main.c create mode 100644 0066/main.c create mode 100644 0067/main.c create mode 100644 0069/main.c create mode 100644 0070/main.c delete mode 100644 c/0026/main.c delete mode 100644 c/0027/main.c delete mode 100644 c/0035/main.c delete mode 100644 c/0058/main.c delete mode 100644 c/0066/main.c delete mode 100644 c/0067/main.c delete mode 100644 c/0069/main.c delete mode 100644 c/0070/main.c delete mode 100644 rust/Cargo.lock delete mode 100644 rust/Cargo.toml delete mode 100644 rust/src/bin/p0001.rs delete mode 100644 rust/src/bin/p0002.rs delete mode 100644 rust/src/bin/p0003.rs delete mode 100644 rust/src/bin/p0004.rs delete mode 100644 rust/src/bin/p0005.rs delete mode 100644 rust/src/bin/p0006.rs delete mode 100644 rust/src/bin/p0009.rs delete mode 100644 rust/src/bin/p0013.rs delete mode 100644 rust/src/bin/p0014.rs delete mode 100644 rust/src/bin/p0021.rs delete mode 100644 rust/src/bin/p0028.rs delete mode 100644 rust/src/lib.rs delete mode 100644 rust/src/list.rs delete mode 100644 rust/src/main.rs diff --git a/.gitignore b/.gitignore index d391bce..fdea387 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -rust/target -rust/.idea +*/target +*/.idea a.out \ No newline at end of file diff --git a/0001/Cargo.lock b/0001/Cargo.lock new file mode 100644 index 0000000..cf4788e --- /dev/null +++ b/0001/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p1" +version = "0.1.0" diff --git a/0001/Cargo.toml b/0001/Cargo.toml new file mode 100644 index 0000000..47a9ccd --- /dev/null +++ b/0001/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p1" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0001/src/main.rs b/0001/src/main.rs new file mode 100644 index 0000000..70128c9 --- /dev/null +++ b/0001/src/main.rs @@ -0,0 +1,25 @@ +use std::collections::HashMap; + +struct Solution {} +impl Solution { + pub fn two_sum(nums: Vec, target: i32) -> Vec { + let mut num_map : HashMap = HashMap::new(); + + let mut i:usize = 0; + loop { + let index = target - nums[i]; + match num_map.get(&index) { + Some(j) => break vec![i as i32, *j as i32], + None => { + num_map.insert(nums[i], i); + i = i + 1; + continue; + } + } + } + } +} + +fn main() { + println!("{:?}", Solution::two_sum(vec![2, 7, 11, 15], 9)); +} \ No newline at end of file diff --git a/0002/Cargo.lock b/0002/Cargo.lock new file mode 100644 index 0000000..2607e79 --- /dev/null +++ b/0002/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p2" +version = "0.1.0" diff --git a/0002/Cargo.toml b/0002/Cargo.toml new file mode 100644 index 0000000..5253ff9 --- /dev/null +++ b/0002/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p2" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0002/src/main.rs b/0002/src/main.rs new file mode 100644 index 0000000..2cc01f3 --- /dev/null +++ b/0002/src/main.rs @@ -0,0 +1,88 @@ +#[derive(PartialEq, Eq, Clone, Debug)] +pub struct ListNode { + pub val: i32, + pub next: Option> +} +// +impl ListNode { + #[inline] + pub fn new(val: i32) -> Self { + ListNode { + next: None, + val + } + } +} + +pub fn vector2list(vec: Vec) -> Option> { + let mut result: Option> = None; + for i in 0..vec.len() { + let mut new_result = Some(Box::new(ListNode::new(vec[vec.len() - i - 1]))); + new_result.as_mut().unwrap().next = result; + result = new_result; + } + result +} + +pub fn list2vector(lst: Option>) -> Vec { + let mut result: Vec = Vec::new(); + let mut cur = &lst; + loop { + match cur { + None => break, + Some(node) => { + result.push(node.val); + cur = &node.next; + }, + } + } + result +} + +struct Solution {} + +impl Solution { + pub fn add_two_numbers(l1: Option>, l2: Option>) -> Option> { + let mut result: Option> = None; + let mut cur1 = &l1; + let mut cur2 = &l2; + let mut carry: i32 = 0; + { + let mut cur_res = &mut result; + loop { + if *cur1 == None && *cur2 == None && carry == 0 { + break; + } else { + let n1 = match cur1 { + Some(node) => { + cur1 = &cur1.as_ref().unwrap().next; + node.val + }, + None => 0 + }; + let n2 = match cur2 { + Some(node) => { + cur2 = &cur2.as_ref().unwrap().next; + node.val + }, + None => 0 + }; + let n = (n1 + n2 + carry) % 10; + carry = if (n1 + n2 + carry) >= 10 { 1 } else { 0 }; + *cur_res = Some(Box::new(ListNode::new(n))); + cur_res = &mut cur_res.as_mut().unwrap().next; + continue; + } + } + } + result + } +} + +fn test(l1: Vec, l2: Vec) -> Vec { + list2vector(Solution::add_two_numbers(vector2list(l1), vector2list(l2))) +} + +fn main() { + println!("{:?}", test(vec![1,2,3], vec![4,5,6])); +} diff --git a/0003/Cargo.lock b/0003/Cargo.lock new file mode 100644 index 0000000..86306ae --- /dev/null +++ b/0003/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p3" +version = "0.1.0" diff --git a/0003/Cargo.toml b/0003/Cargo.toml new file mode 100644 index 0000000..f8264b5 --- /dev/null +++ b/0003/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p3" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0003/src/main.rs b/0003/src/main.rs new file mode 100644 index 0000000..7293c13 --- /dev/null +++ b/0003/src/main.rs @@ -0,0 +1,34 @@ +struct Solution {} + +impl Solution { + pub fn length_of_longest_substring(s: String) -> i32 { + let mut set: [u8;256] = [0;256]; + let mut i1: usize = 0; + let mut i2: usize = 0; + let mut max: i32 = 0; + loop { + if i1 >= s.len() { break; } + if set[s.as_bytes()[i1] as usize] == 0 { + set[s.as_bytes()[i1] as usize] = 1; + i1 = i1 + 1; + if i1 as i32 - i2 as i32 > max { max = i1 as i32 - i2 as i32 } + continue; + } else { + loop { + set[s.as_bytes()[i2] as usize] = 0; + i2 = i2 + 1; + if set[s.as_bytes()[i1] as usize] == 0 { + break; + } else { + continue; + } + } + } + } + max + } +} + +fn main() { + println!("{:?}", Solution::length_of_longest_substring("abcabcbb".to_string())); +} \ No newline at end of file diff --git a/0004/Cargo.lock b/0004/Cargo.lock new file mode 100644 index 0000000..c370f39 --- /dev/null +++ b/0004/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p4" +version = "0.1.0" diff --git a/0004/Cargo.toml b/0004/Cargo.toml new file mode 100644 index 0000000..264a6d2 --- /dev/null +++ b/0004/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p4" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0004/src/main.rs b/0004/src/main.rs new file mode 100644 index 0000000..bab223b --- /dev/null +++ b/0004/src/main.rs @@ -0,0 +1,95 @@ +use std::cmp::{min, max}; + +impl Solution { + fn vec_get(v: &Vec, n: i32) -> i32 { + if n < 0 { + return i32::MIN; + } + if n >= v.len() as i32 { + return i32::MAX; + } + return v[n as usize]; + } + pub fn find_median_sorted_arrays(nums1: Vec, nums2: Vec) -> f64 { + let mut n1 = &nums1; + let mut n2 = &nums2; + if n1.len() < n2.len() { + n1 = &nums2; + n2 = &nums1; + } + + if n2.len() == 0 || n1[n1.len()-1] <= n2[0] { + if (n1.len() + n2.len()) % 2 == 0 { + let mid_index = (n1.len() + n2.len()) / 2; + let right: i32; + if mid_index == n1.len() { + right = n2[0]; + } else { + right = n1[mid_index]; + } + return (n1[mid_index - 1] + right) as f64 / 2.0; + } else { + let mid_index = (n1.len() + n2.len()) / 2; + return n1[mid_index] as f64; + } + } + if n2[n2.len()-1] <= n1[0] { + if (n1.len() + n2.len()) % 2 == 0 { + let mid_index = (n1.len() + n2.len()) / 2 - n2.len(); + let left: i32; + if mid_index <= 0 { + left = n2[n2.len() - 1]; + } else { + left = n1[mid_index - 1]; + } + return (left + n1[mid_index]) as f64 / 2.0; + } else { + let mid_index = (n1.len() + n2.len()) / 2 - n2.len(); + return n1[mid_index] as f64; + } + } + + let mut left: i32 = 0; + let mut right: i32 = n1.len() as i32 - 1; + let mut mid: i32 = 0; + let mut mid2: i32 = 0; + loop { + if left > right { break; } + mid = (left + right) / 2; + mid2 = (n1.len() + n2.len()) as i32 / 2 - (1 + mid) - 1; + if mid2 < -1 { + right = mid - 1; + continue; + } + if mid2 >= n2.len() as i32 { + left = mid + 1; + continue; + } + if n1[mid as usize] > Self::vec_get(n2, mid2 + 1) { + right = mid - 1; + continue; + } + if n1[mid as usize + 1] < Self::vec_get(n2, mid2) { + left = mid + 1; + continue; + } + break; + } + if (n1.len() + n2.len()) % 2 == 0 { + (max(n1[mid as usize], Self::vec_get(n2, mid2)) + + min(n1[mid as usize + 1], Self::vec_get(n2, mid2 + 1))) as f64 / 2.0 + } else { + min(n1[mid as usize +1], Self::vec_get(n2, mid2 + 1)) as f64 + } + } +} + +struct Solution {} +fn main() { + println!("{}", Solution::find_median_sorted_arrays(vec![1,2,3], vec![4,5,6])); + println!("{}", Solution::find_median_sorted_arrays(vec![4,5,6], vec![1,2,3])); + println!("{}", Solution::find_median_sorted_arrays(vec![1,2,3], vec![5,6])); + println!("{}", Solution::find_median_sorted_arrays(vec![4,5,6], vec![1,2])); + println!("{}", Solution::find_median_sorted_arrays(vec![1,3,5], vec![2,4,6])); + println!("{}", Solution::find_median_sorted_arrays(vec![3], vec![1,2,4,5])); +} \ No newline at end of file diff --git a/0005/Cargo.lock b/0005/Cargo.lock new file mode 100644 index 0000000..832b266 --- /dev/null +++ b/0005/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p5" +version = "0.1.0" diff --git a/0005/Cargo.toml b/0005/Cargo.toml new file mode 100644 index 0000000..b6d131b --- /dev/null +++ b/0005/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p5" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0005/src/main.rs b/0005/src/main.rs new file mode 100644 index 0000000..01b368d --- /dev/null +++ b/0005/src/main.rs @@ -0,0 +1,67 @@ +impl Solution { + fn check_odd(s: &String, i: i32) -> (i32, i32, i32) { + let mut r = 0; + loop { + let next = r + 1; + if i - next < 0 + || i + next >= s.len() as i32 + || s.as_bytes()[(i-next) as usize] != s.as_bytes()[(i+next) as usize] { + break; + } + r = next; + } + let len = 2 * r + 1; + let start = i - r; + let end = i + r; + (len, start, end) + } + + fn check_even(s: &String, i: i32) -> (i32, i32, i32) { + let mut r = 0; + loop { + let next = r + 1; + if i - next + 1 < 0 + || i + next >= s.len() as i32 + || s.as_bytes()[(i-next+1) as usize] != s.as_bytes()[(i+next) as usize] { + break; + } + r = next; + } + let len = 2 * r; + let start = i - r + 1; + let end = i + r; + (len, start, end) + } + + fn check_palindrome_len(s: &String, i: i32) -> (i32, i32, i32) { + let (len1, start1, end1) = Self::check_odd(s, i); + let (len2, start2, end2) = Self::check_even(s, i); + if len2 > len1 { + (len2, start2, end2) + } else { + (len1, start1, end1) + } + } + + pub fn longest_palindrome(s: String) -> String { + let mut maxpalinlen = -1; + let mut start: i32 = 0; + let mut end: i32 = 0; + for i in 0..s.len() { + let (palin_len, pstart, pend) = Self::check_palindrome_len(&s, i as i32); + if palin_len > maxpalinlen { + maxpalinlen = palin_len; + start = pstart; + end = pend; + } + } + s[start as usize ..(end + 1) as usize].to_string() + } +} + +struct Solution {} + +fn main () { + println!("{}", Solution::longest_palindrome("babad".to_string())); + println!("{}", Solution::longest_palindrome("cbbd".to_string())); +} diff --git a/0006/Cargo.lock b/0006/Cargo.lock new file mode 100644 index 0000000..7f8c116 --- /dev/null +++ b/0006/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p6" +version = "0.1.0" diff --git a/0006/Cargo.toml b/0006/Cargo.toml new file mode 100644 index 0000000..967e5aa --- /dev/null +++ b/0006/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p6" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0006/src/main.rs b/0006/src/main.rs new file mode 100644 index 0000000..92e4b6f --- /dev/null +++ b/0006/src/main.rs @@ -0,0 +1,40 @@ +impl Solution { + pub fn convert(s: String, num_rows: i32) -> String { + if num_rows <= 1 { + return s; + } + let mut x = 0; + let mut y = 0; + let mut path: Vec<(i32,i32)> = vec!(); + let mut is_down = true; + for _ in 0..s.len() { + path.push((x, y)); + if is_down { + y = y + 1; + if y == num_rows - 1 { + is_down = false; + } + } else { + y = y - 1; + x = x + 1; + if y == 0 { + is_down = true; + } + } + } + let mut lines: Vec = vec!(); + for _ in 0..num_rows { + lines.push("".to_string()); + } + for i in 0..s.len() { + let (_,y) = path[i]; + lines[y as usize].push(s.as_bytes()[i] as char); + } + lines.join("") + } +} + +struct Solution {} +fn main() { + println!("{}", Solution::convert("PAYPALISHIRING".to_string(), 3)); +} \ No newline at end of file diff --git a/0009/Cargo.lock b/0009/Cargo.lock new file mode 100644 index 0000000..adc6c9d --- /dev/null +++ b/0009/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p9" +version = "0.1.0" diff --git a/0009/Cargo.toml b/0009/Cargo.toml new file mode 100644 index 0000000..7b36dc9 --- /dev/null +++ b/0009/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p9" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0009/src/main.rs b/0009/src/main.rs new file mode 100644 index 0000000..4ecb473 --- /dev/null +++ b/0009/src/main.rs @@ -0,0 +1,13 @@ +impl Solution { + pub fn is_palindrome(x: i32) -> bool { + if x < 0 { + return false; + } + let s = x.to_string(); + let rs: String = s.chars().rev().collect(); + return s == rs; + } +} + +struct Solution {} +fn main() {} \ No newline at end of file diff --git a/0013/Cargo.lock b/0013/Cargo.lock new file mode 100644 index 0000000..5b1a871 --- /dev/null +++ b/0013/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p13" +version = "0.1.0" diff --git a/0013/Cargo.toml b/0013/Cargo.toml new file mode 100644 index 0000000..ce536c4 --- /dev/null +++ b/0013/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p13" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0013/src/main.rs b/0013/src/main.rs new file mode 100644 index 0000000..b5f8a62 --- /dev/null +++ b/0013/src/main.rs @@ -0,0 +1,33 @@ +impl Solution { + fn char_to_int(c: char) -> i32 { + match c { + 'I' => 1, + 'V' => 5, + 'X' => 10, + 'L' => 50, + 'C' => 100, + 'D' => 500, + 'M' => 1000, + _ => 0, + } + } + pub fn roman_to_int(s: String) -> i32 { + let mut sum = 0; + for i in 0..s.len() { + if i < s.len() - 1 { + if Self::char_to_int(s.as_bytes()[i as usize] as char) + < Self::char_to_int(s.as_bytes()[i+1 as usize] as char) { + sum = sum - Self::char_to_int(s.as_bytes()[i as usize] as char); + continue; + } + } + sum = sum + Self::char_to_int(s.as_bytes()[i as usize] as char); + } + sum + } +} + +struct Solution {} +fn main() { + println!("{}", Solution::roman_to_int("MCMXCIV".to_string())); +} \ No newline at end of file diff --git a/0014/Cargo.lock b/0014/Cargo.lock new file mode 100644 index 0000000..83c9b24 --- /dev/null +++ b/0014/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p14" +version = "0.1.0" diff --git a/0014/Cargo.toml b/0014/Cargo.toml new file mode 100644 index 0000000..23404ea --- /dev/null +++ b/0014/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p14" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0014/src/main.rs b/0014/src/main.rs new file mode 100644 index 0000000..e85ef8f --- /dev/null +++ b/0014/src/main.rs @@ -0,0 +1,30 @@ +impl Solution { + pub fn longest_common_prefix(strs: Vec) -> String { + if strs.is_empty() { return "".to_string(); } + let mut l: i32 = -1; + let mut brk = false; + for i in 0..strs[0].len() { + let c = strs[0].as_bytes()[i]; + for j in 1..strs.len() { + if strs[j].len() <= i || strs[j].as_bytes()[i] != c { + brk = true; + break; + } + } + if brk { break; } + l = l + 1; + } + if l < 0 { + return "".to_string(); + } + strs[0][0..(l+1) as usize].to_string() + } +} + +struct Solution {} +fn main() { + println!("{}", Solution::longest_common_prefix(vec![ + "fliower".to_string(), + "fliow".to_string(), + "fliight".to_string()])); +} \ No newline at end of file diff --git a/0021/Cargo.lock b/0021/Cargo.lock new file mode 100644 index 0000000..2f6432e --- /dev/null +++ b/0021/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p21" +version = "0.1.0" diff --git a/0021/Cargo.toml b/0021/Cargo.toml new file mode 100644 index 0000000..a23a66a --- /dev/null +++ b/0021/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p21" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0021/src/main.rs b/0021/src/main.rs new file mode 100644 index 0000000..a53e20c --- /dev/null +++ b/0021/src/main.rs @@ -0,0 +1,100 @@ +#[derive(PartialEq, Eq, Clone, Debug)] +pub struct ListNode { + pub val: i32, + pub next: Option> +} +// +impl ListNode { + #[inline] + pub fn new(val: i32) -> Self { + ListNode { + next: None, + val + } + } +} + +pub fn vector2list(vec: Vec) -> Option> { + let mut result: Option> = None; + for i in 0..vec.len() { + let mut new_result = Some(Box::new(ListNode::new(vec[vec.len() - i - 1]))); + new_result.as_mut().unwrap().next = result; + result = new_result; + } + result +} + +pub fn list2vector(lst: Option>) -> Vec { + let mut result: Vec = Vec::new(); + let mut cur = &lst; + loop { + match cur { + None => break, + Some(node) => { + result.push(node.val); + cur = &node.next; + }, + } + } + result +} + + +impl Solution { + pub fn merge_two_lists(list1: Option>, list2: Option>) -> Option> { + let mut p1 = &list1; + let mut p2 = &list2; + let mut result: Vec = vec!(); + loop { + let v1: i32; + let v2: i32; + match p1 { + None => { + match p2 { + None => break, + Some(px) => { + result.push(px.val); + p2 = &px.next; + continue; + } + } + }, + Some(p1) => { v1 = p1.val; }, + } + match p2 { + None => { + match p1 { + None => break, + Some(px) => { + result.push(px.val); + p1 = &px.next; + continue; + } + } + }, + Some(p2) => { v2 = p2.val; }, + } + if v1 <= v2 { + result.push(v1); + p1 = match p1 { + Some(px) => &px.next, + None => p1, + }; + } else { + result.push(v2); + p2 = match p2 { + Some(px) => &px.next, + None => p2, + }; + } + } + vector2list(result) + } +} + +struct Solution {} +fn main() { + println!("{:?}", list2vector( + Solution::merge_two_lists(vector2list(vec!(1,3,5)), + vector2list(vec!(2,4,6))))); +} \ No newline at end of file diff --git a/0026/main.c b/0026/main.c new file mode 100644 index 0000000..27f94e0 --- /dev/null +++ b/0026/main.c @@ -0,0 +1,27 @@ +#include + +// begin + +int removeDuplicates(int* nums, int numsSize) { + int *p1, p2; + if (numsSize == 0) return 0; + + int p = 0; + int cur = nums[0]; + for (int i = 1; i < numsSize; i++) { + if (nums[i] != cur) { + p++; + cur = nums[i]; + nums[p] = nums[i]; + } + } + return p+1; +} + +// end + +int main() { + int arr[] = {1,2,3,3,4,5}; + printf("%d\n", removeDuplicates(arr, sizeof(arr) / sizeof(int))); + return 0; +} \ No newline at end of file diff --git a/0027/main.c b/0027/main.c new file mode 100644 index 0000000..dd5ab1b --- /dev/null +++ b/0027/main.c @@ -0,0 +1,11 @@ +int removeElement(int* nums, int numsSize, int val) { + int p = 0; + for (int i = 0; i < numsSize; i++) { + if (nums[i] == val) { + continue; + } + nums[p] = nums[i]; + p++; + } + return p; +} diff --git a/0028/Cargo.lock b/0028/Cargo.lock new file mode 100644 index 0000000..270e521 --- /dev/null +++ b/0028/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "p28" +version = "0.1.0" diff --git a/0028/Cargo.toml b/0028/Cargo.toml new file mode 100644 index 0000000..c78abd7 --- /dev/null +++ b/0028/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "p28" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/0028/src/main.rs b/0028/src/main.rs new file mode 100644 index 0000000..c830ac4 --- /dev/null +++ b/0028/src/main.rs @@ -0,0 +1,20 @@ +impl Solution { + pub fn str_str(haystack: String, needle: String) -> i32 { + if needle.len() > haystack.len() { return -1; } + for i in 0..haystack.len() - needle.len()+1 { + let mut failed = false; + for j in 0..needle.len() { + if haystack.as_bytes()[i+j] != needle.as_bytes()[j] { + failed = true; + break; + } + } + if !failed { return i as i32; } + } + -1 + } +} +struct Solution { } +fn main() { + println!("{}", Solution::str_str("abaaa".to_string(), "abb".to_string())); +} \ No newline at end of file diff --git a/0035/main.c b/0035/main.c new file mode 100644 index 0000000..287885a --- /dev/null +++ b/0035/main.c @@ -0,0 +1,27 @@ +#include + +// begin + +int searchInsert(int* nums, int numsSize, int target) { + int lp = 0, rp = numsSize - 1; + int mid = -1; + while (lp <= rp) { + mid = lp + (rp - lp) / 2; + if (target > nums[mid]) { + lp = mid + 1; + } else if (target < nums[mid]) { + rp = mid - 1; + } else { + return mid; + } + } + if (target > nums[mid]) mid++; + return mid; +} + +// end + +int main() { + int arr[] = {1,2,4,5,6}; + printf("%d\n", searchInsert(arr, 5, 3)); +} \ No newline at end of file diff --git a/0058/main.c b/0058/main.c new file mode 100644 index 0000000..6aff206 --- /dev/null +++ b/0058/main.c @@ -0,0 +1,21 @@ +int lengthOfLastWord(char* s) { + int i = 0; + int cur = 0; + int last = 0; + while (s[i] != '\0') { + if (s[i] == ' ') { + if (cur > 0) { + last = cur; + } + cur = 0; + } else { + cur++; + } + i++; + } + if (cur > 0) { + return cur; + } else { + return last; + } +} \ No newline at end of file diff --git a/0066/main.c b/0066/main.c new file mode 100644 index 0000000..b01eb8b --- /dev/null +++ b/0066/main.c @@ -0,0 +1,38 @@ +#include + +// begin + +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* plusOne(int* digits, int digitsSize, int* returnSize) { + int *buffer = malloc((digitsSize + 1) * sizeof(int)); + for (int i = 0; i < digitsSize; i++) { + buffer[i] = digits[digitsSize - 1 - i]; + } + buffer[0]++; + int carry = 0; + for (int i = 0; i < digitsSize; i++) { + int val = buffer[i] + carry; + carry = val / 10; + buffer[i] = val % 10; + } + int len = digitsSize; + if (carry) { + len++; + buffer[digitsSize] = 1; + } + int lp = 0, rp = len - 1; + while (lp <= rp) { + int t = buffer[lp]; + buffer[lp] = buffer[rp]; + buffer[rp] = t; + lp++; + rp--; + } + *returnSize = len; + return buffer; +} + +// end + diff --git a/0067/main.c b/0067/main.c new file mode 100644 index 0000000..900c685 --- /dev/null +++ b/0067/main.c @@ -0,0 +1,73 @@ +#include +#include + +typedef struct { + int len; + char *buf; + int capacity; +} String; + +void String_push(String *self, char c) { + if (self->len + 2 >= self->capacity) { + int new_capacity = self->capacity * 2; + self->buf = realloc(self->buf, new_capacity); + self->capacity = new_capacity; + } + self->buf[self->len] = c; + self->buf[self->len + 1] = '\0'; + self->len++; +} + +void String_init(String *self) { + self->capacity = 16; + self->buf = malloc(16); + self->len = 0; + self->buf[0] = '\0'; +} + +char* str_reverse(char *s) { + int lp = 0, rp = strlen(s) - 1; + s = strdup(s); + while (lp <= rp) { + char tmp = s[lp]; + s[lp] = s[rp]; + s[rp] = tmp; + rp--; + lp++; + } + return s; +} + +char* addBinary(char* a, char* b) { + a = str_reverse(a); + b = str_reverse(b); + String ret; + String_init(&ret); + int len_a = strlen(a); + int len_b = strlen(b); + int len = len_a > len_b ? len_a : len_b; + int carry = 0; + for (int i = 0; i < len; i++) { + char ca, cb; + if (i >= len_a) { + ca = 0; + } else { + ca = a[i] - '0'; + } + if (i >= len_b) { + cb = 0; + } else { + cb = b[i] - '0'; + } + char val = ca + cb + carry; + String_push(&ret, val % 2 + '0'); + carry = val / 2; + } + if (carry) String_push(&ret, '1'); + free(a); + free(b); + char *oldbuf = ret.buf; + ret.buf = str_reverse(ret.buf); + free(oldbuf); + return ret.buf; +} diff --git a/0069/main.c b/0069/main.c new file mode 100644 index 0000000..86aab4a --- /dev/null +++ b/0069/main.c @@ -0,0 +1,26 @@ +#include +#include + +int mySqrt(int x) { + int64_t t = x; + int64_t ln = 0, rn = x; + while (ln <= rn) { + int64_t mid = ln + (rn - ln) / 2; + if (mid * mid < x) { + if ((mid + 1) * (mid + 1) > x) { + return mid; + } + ln = mid + 1; + } else if (mid * mid > x) { + rn = mid - 1; + } else { + return mid; + } + } + return -1; +} + +int main() { + printf("%d\n", mySqrt(9)); + return 0; +} diff --git a/0070/main.c b/0070/main.c new file mode 100644 index 0000000..143eeb3 --- /dev/null +++ b/0070/main.c @@ -0,0 +1,15 @@ +#include + +int climbStairsImpl(int n, int* cache) { + if (n == 0) return 1; + if (n < 0) return 0; + if (cache[n] > 0) return cache[n]; + int ret = climbStairsImpl(n-1, cache) + climbStairsImpl(n-2, cache); + cache[n] = ret; + return ret; +} + +int climbStairs(int n) { + int *cache = malloc(sizeof(int) * (n+1)); + return climbStairsImpl(n, cache); +} diff --git a/c/0026/main.c b/c/0026/main.c deleted file mode 100644 index 27f94e0..0000000 --- a/c/0026/main.c +++ /dev/null @@ -1,27 +0,0 @@ -#include - -// begin - -int removeDuplicates(int* nums, int numsSize) { - int *p1, p2; - if (numsSize == 0) return 0; - - int p = 0; - int cur = nums[0]; - for (int i = 1; i < numsSize; i++) { - if (nums[i] != cur) { - p++; - cur = nums[i]; - nums[p] = nums[i]; - } - } - return p+1; -} - -// end - -int main() { - int arr[] = {1,2,3,3,4,5}; - printf("%d\n", removeDuplicates(arr, sizeof(arr) / sizeof(int))); - return 0; -} \ No newline at end of file diff --git a/c/0027/main.c b/c/0027/main.c deleted file mode 100644 index dd5ab1b..0000000 --- a/c/0027/main.c +++ /dev/null @@ -1,11 +0,0 @@ -int removeElement(int* nums, int numsSize, int val) { - int p = 0; - for (int i = 0; i < numsSize; i++) { - if (nums[i] == val) { - continue; - } - nums[p] = nums[i]; - p++; - } - return p; -} diff --git a/c/0035/main.c b/c/0035/main.c deleted file mode 100644 index 287885a..0000000 --- a/c/0035/main.c +++ /dev/null @@ -1,27 +0,0 @@ -#include - -// begin - -int searchInsert(int* nums, int numsSize, int target) { - int lp = 0, rp = numsSize - 1; - int mid = -1; - while (lp <= rp) { - mid = lp + (rp - lp) / 2; - if (target > nums[mid]) { - lp = mid + 1; - } else if (target < nums[mid]) { - rp = mid - 1; - } else { - return mid; - } - } - if (target > nums[mid]) mid++; - return mid; -} - -// end - -int main() { - int arr[] = {1,2,4,5,6}; - printf("%d\n", searchInsert(arr, 5, 3)); -} \ No newline at end of file diff --git a/c/0058/main.c b/c/0058/main.c deleted file mode 100644 index 6aff206..0000000 --- a/c/0058/main.c +++ /dev/null @@ -1,21 +0,0 @@ -int lengthOfLastWord(char* s) { - int i = 0; - int cur = 0; - int last = 0; - while (s[i] != '\0') { - if (s[i] == ' ') { - if (cur > 0) { - last = cur; - } - cur = 0; - } else { - cur++; - } - i++; - } - if (cur > 0) { - return cur; - } else { - return last; - } -} \ No newline at end of file diff --git a/c/0066/main.c b/c/0066/main.c deleted file mode 100644 index b01eb8b..0000000 --- a/c/0066/main.c +++ /dev/null @@ -1,38 +0,0 @@ -#include - -// begin - -/** - * Note: The returned array must be malloced, assume caller calls free(). - */ -int* plusOne(int* digits, int digitsSize, int* returnSize) { - int *buffer = malloc((digitsSize + 1) * sizeof(int)); - for (int i = 0; i < digitsSize; i++) { - buffer[i] = digits[digitsSize - 1 - i]; - } - buffer[0]++; - int carry = 0; - for (int i = 0; i < digitsSize; i++) { - int val = buffer[i] + carry; - carry = val / 10; - buffer[i] = val % 10; - } - int len = digitsSize; - if (carry) { - len++; - buffer[digitsSize] = 1; - } - int lp = 0, rp = len - 1; - while (lp <= rp) { - int t = buffer[lp]; - buffer[lp] = buffer[rp]; - buffer[rp] = t; - lp++; - rp--; - } - *returnSize = len; - return buffer; -} - -// end - diff --git a/c/0067/main.c b/c/0067/main.c deleted file mode 100644 index 900c685..0000000 --- a/c/0067/main.c +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include - -typedef struct { - int len; - char *buf; - int capacity; -} String; - -void String_push(String *self, char c) { - if (self->len + 2 >= self->capacity) { - int new_capacity = self->capacity * 2; - self->buf = realloc(self->buf, new_capacity); - self->capacity = new_capacity; - } - self->buf[self->len] = c; - self->buf[self->len + 1] = '\0'; - self->len++; -} - -void String_init(String *self) { - self->capacity = 16; - self->buf = malloc(16); - self->len = 0; - self->buf[0] = '\0'; -} - -char* str_reverse(char *s) { - int lp = 0, rp = strlen(s) - 1; - s = strdup(s); - while (lp <= rp) { - char tmp = s[lp]; - s[lp] = s[rp]; - s[rp] = tmp; - rp--; - lp++; - } - return s; -} - -char* addBinary(char* a, char* b) { - a = str_reverse(a); - b = str_reverse(b); - String ret; - String_init(&ret); - int len_a = strlen(a); - int len_b = strlen(b); - int len = len_a > len_b ? len_a : len_b; - int carry = 0; - for (int i = 0; i < len; i++) { - char ca, cb; - if (i >= len_a) { - ca = 0; - } else { - ca = a[i] - '0'; - } - if (i >= len_b) { - cb = 0; - } else { - cb = b[i] - '0'; - } - char val = ca + cb + carry; - String_push(&ret, val % 2 + '0'); - carry = val / 2; - } - if (carry) String_push(&ret, '1'); - free(a); - free(b); - char *oldbuf = ret.buf; - ret.buf = str_reverse(ret.buf); - free(oldbuf); - return ret.buf; -} diff --git a/c/0069/main.c b/c/0069/main.c deleted file mode 100644 index 86aab4a..0000000 --- a/c/0069/main.c +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include - -int mySqrt(int x) { - int64_t t = x; - int64_t ln = 0, rn = x; - while (ln <= rn) { - int64_t mid = ln + (rn - ln) / 2; - if (mid * mid < x) { - if ((mid + 1) * (mid + 1) > x) { - return mid; - } - ln = mid + 1; - } else if (mid * mid > x) { - rn = mid - 1; - } else { - return mid; - } - } - return -1; -} - -int main() { - printf("%d\n", mySqrt(9)); - return 0; -} diff --git a/c/0070/main.c b/c/0070/main.c deleted file mode 100644 index 143eeb3..0000000 --- a/c/0070/main.c +++ /dev/null @@ -1,15 +0,0 @@ -#include - -int climbStairsImpl(int n, int* cache) { - if (n == 0) return 1; - if (n < 0) return 0; - if (cache[n] > 0) return cache[n]; - int ret = climbStairsImpl(n-1, cache) + climbStairsImpl(n-2, cache); - cache[n] = ret; - return ret; -} - -int climbStairs(int n) { - int *cache = malloc(sizeof(int) * (n+1)); - return climbStairsImpl(n, cache); -} diff --git a/rust/Cargo.lock b/rust/Cargo.lock deleted file mode 100644 index d5eb8a3..0000000 --- a/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "leetcode" -version = "0.1.0" diff --git a/rust/Cargo.toml b/rust/Cargo.toml deleted file mode 100644 index dedfbd3..0000000 --- a/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "leetcode" -version = "0.1.0" -edition = "2021" - -[dependencies] diff --git a/rust/src/bin/p0001.rs b/rust/src/bin/p0001.rs deleted file mode 100644 index 70128c9..0000000 --- a/rust/src/bin/p0001.rs +++ /dev/null @@ -1,25 +0,0 @@ -use std::collections::HashMap; - -struct Solution {} -impl Solution { - pub fn two_sum(nums: Vec, target: i32) -> Vec { - let mut num_map : HashMap = HashMap::new(); - - let mut i:usize = 0; - loop { - let index = target - nums[i]; - match num_map.get(&index) { - Some(j) => break vec![i as i32, *j as i32], - None => { - num_map.insert(nums[i], i); - i = i + 1; - continue; - } - } - } - } -} - -fn main() { - println!("{:?}", Solution::two_sum(vec![2, 7, 11, 15], 9)); -} \ No newline at end of file diff --git a/rust/src/bin/p0002.rs b/rust/src/bin/p0002.rs deleted file mode 100644 index d8acf94..0000000 --- a/rust/src/bin/p0002.rs +++ /dev/null @@ -1,49 +0,0 @@ -use leetcode::list::*; - -struct Solution {} - -impl Solution { - pub fn add_two_numbers(l1: Option>, l2: Option>) -> Option> { - let mut result: Option> = None; - let mut cur1 = &l1; - let mut cur2 = &l2; - let mut carry: i32 = 0; - { - let mut cur_res = &mut result; - loop { - if *cur1 == None && *cur2 == None && carry == 0 { - break; - } else { - let n1 = match cur1 { - Some(node) => { - cur1 = &cur1.as_ref().unwrap().next; - node.val - }, - None => 0 - }; - let n2 = match cur2 { - Some(node) => { - cur2 = &cur2.as_ref().unwrap().next; - node.val - }, - None => 0 - }; - let n = (n1 + n2 + carry) % 10; - carry = if (n1 + n2 + carry) >= 10 { 1 } else { 0 }; - *cur_res = Some(Box::new(ListNode::new(n))); - cur_res = &mut cur_res.as_mut().unwrap().next; - continue; - } - } - } - result - } -} - -fn test(l1: Vec, l2: Vec) -> Vec { - list2vector(Solution::add_two_numbers(vector2list(l1), vector2list(l2))) -} - -fn main() { - println!("{:?}", test(vec![1,2,3], vec![4,5,6])); -} diff --git a/rust/src/bin/p0003.rs b/rust/src/bin/p0003.rs deleted file mode 100644 index 7293c13..0000000 --- a/rust/src/bin/p0003.rs +++ /dev/null @@ -1,34 +0,0 @@ -struct Solution {} - -impl Solution { - pub fn length_of_longest_substring(s: String) -> i32 { - let mut set: [u8;256] = [0;256]; - let mut i1: usize = 0; - let mut i2: usize = 0; - let mut max: i32 = 0; - loop { - if i1 >= s.len() { break; } - if set[s.as_bytes()[i1] as usize] == 0 { - set[s.as_bytes()[i1] as usize] = 1; - i1 = i1 + 1; - if i1 as i32 - i2 as i32 > max { max = i1 as i32 - i2 as i32 } - continue; - } else { - loop { - set[s.as_bytes()[i2] as usize] = 0; - i2 = i2 + 1; - if set[s.as_bytes()[i1] as usize] == 0 { - break; - } else { - continue; - } - } - } - } - max - } -} - -fn main() { - println!("{:?}", Solution::length_of_longest_substring("abcabcbb".to_string())); -} \ No newline at end of file diff --git a/rust/src/bin/p0004.rs b/rust/src/bin/p0004.rs deleted file mode 100644 index 2925500..0000000 --- a/rust/src/bin/p0004.rs +++ /dev/null @@ -1,96 +0,0 @@ -use std::cmp::{min, max}; - -impl Solution { - fn vec_get(v: &Vec, n: i32) -> i32 { - if n < 0 { - return i32::MIN; - } - if n >= v.len() as i32 { - return i32::MAX; - } - return v[n as usize]; - } - pub fn find_median_sorted_arrays(nums1: Vec, nums2: Vec) -> f64 { - let mut n1 = &nums1; - let mut n2 = &nums2; - if n1.len() < n2.len() { - n1 = &nums2; - n2 = &nums1; - } - - if n2.len() == 0 || n1[n1.len()-1] <= n2[0] { - if (n1.len() + n2.len()) % 2 == 0 { - let mid_index = (n1.len() + n2.len()) / 2; - let right: i32; - if mid_index == n1.len() { - right = n2[0]; - } else { - right = n1[mid_index]; - } - return (n1[mid_index - 1] + right) as f64 / 2.0; - } else { - let mid_index = (n1.len() + n2.len()) / 2; - return n1[mid_index] as f64; - } - } - if n2[n2.len()-1] <= n1[0] { - if (n1.len() + n2.len()) % 2 == 0 { - let mid_index = (n1.len() + n2.len()) / 2 - n2.len(); - let left: i32; - if mid_index <= 0 { - left = n2[n2.len() - 1]; - } else { - left = n1[mid_index - 1]; - } - return (left + n1[mid_index]) as f64 / 2.0; - } else { - let mid_index = (n1.len() + n2.len()) / 2 - n2.len(); - return n1[mid_index] as f64; - } - } - - let mut left: i32 = 0; - let mut right: i32 = n1.len() as i32 - 1; - let mut mid: i32 = 0; - let mut mid2: i32 = 0; - loop { - if left > right { break; } - println!("left: {}, right: {}", left, right); - mid = (left + right) / 2; - mid2 = (n1.len() + n2.len()) as i32 / 2 - (1 + mid) - 1; - if mid2 < -1 { - right = mid - 1; - continue; - } - if mid2 >= n2.len() as i32 { - left = mid + 1; - continue; - } - if n1[mid as usize] > Self::vec_get(n2, mid2 + 1) { - right = mid - 1; - continue; - } - if n1[mid as usize + 1] < Self::vec_get(n2, mid2) { - left = mid + 1; - continue; - } - break; - } - if (n1.len() + n2.len()) % 2 == 0 { - (max(n1[mid as usize], Self::vec_get(n2, mid2)) - + min(n1[mid as usize + 1], Self::vec_get(n2, mid2 + 1))) as f64 / 2.0 - } else { - min(n1[mid as usize +1], Self::vec_get(n2, mid2 + 1)) as f64 - } - } -} - -struct Solution {} -fn main() { - println!("{}", Solution::find_median_sorted_arrays(vec![1,2,3], vec![4,5,6])); - println!("{}", Solution::find_median_sorted_arrays(vec![4,5,6], vec![1,2,3])); - println!("{}", Solution::find_median_sorted_arrays(vec![1,2,3], vec![5,6])); - println!("{}", Solution::find_median_sorted_arrays(vec![4,5,6], vec![1,2])); - println!("{}", Solution::find_median_sorted_arrays(vec![1,3,5], vec![2,4,6])); - println!("{}", Solution::find_median_sorted_arrays(vec![3], vec![1,2,4,5])); -} \ No newline at end of file diff --git a/rust/src/bin/p0005.rs b/rust/src/bin/p0005.rs deleted file mode 100644 index 01b368d..0000000 --- a/rust/src/bin/p0005.rs +++ /dev/null @@ -1,67 +0,0 @@ -impl Solution { - fn check_odd(s: &String, i: i32) -> (i32, i32, i32) { - let mut r = 0; - loop { - let next = r + 1; - if i - next < 0 - || i + next >= s.len() as i32 - || s.as_bytes()[(i-next) as usize] != s.as_bytes()[(i+next) as usize] { - break; - } - r = next; - } - let len = 2 * r + 1; - let start = i - r; - let end = i + r; - (len, start, end) - } - - fn check_even(s: &String, i: i32) -> (i32, i32, i32) { - let mut r = 0; - loop { - let next = r + 1; - if i - next + 1 < 0 - || i + next >= s.len() as i32 - || s.as_bytes()[(i-next+1) as usize] != s.as_bytes()[(i+next) as usize] { - break; - } - r = next; - } - let len = 2 * r; - let start = i - r + 1; - let end = i + r; - (len, start, end) - } - - fn check_palindrome_len(s: &String, i: i32) -> (i32, i32, i32) { - let (len1, start1, end1) = Self::check_odd(s, i); - let (len2, start2, end2) = Self::check_even(s, i); - if len2 > len1 { - (len2, start2, end2) - } else { - (len1, start1, end1) - } - } - - pub fn longest_palindrome(s: String) -> String { - let mut maxpalinlen = -1; - let mut start: i32 = 0; - let mut end: i32 = 0; - for i in 0..s.len() { - let (palin_len, pstart, pend) = Self::check_palindrome_len(&s, i as i32); - if palin_len > maxpalinlen { - maxpalinlen = palin_len; - start = pstart; - end = pend; - } - } - s[start as usize ..(end + 1) as usize].to_string() - } -} - -struct Solution {} - -fn main () { - println!("{}", Solution::longest_palindrome("babad".to_string())); - println!("{}", Solution::longest_palindrome("cbbd".to_string())); -} diff --git a/rust/src/bin/p0006.rs b/rust/src/bin/p0006.rs deleted file mode 100644 index 92e4b6f..0000000 --- a/rust/src/bin/p0006.rs +++ /dev/null @@ -1,40 +0,0 @@ -impl Solution { - pub fn convert(s: String, num_rows: i32) -> String { - if num_rows <= 1 { - return s; - } - let mut x = 0; - let mut y = 0; - let mut path: Vec<(i32,i32)> = vec!(); - let mut is_down = true; - for _ in 0..s.len() { - path.push((x, y)); - if is_down { - y = y + 1; - if y == num_rows - 1 { - is_down = false; - } - } else { - y = y - 1; - x = x + 1; - if y == 0 { - is_down = true; - } - } - } - let mut lines: Vec = vec!(); - for _ in 0..num_rows { - lines.push("".to_string()); - } - for i in 0..s.len() { - let (_,y) = path[i]; - lines[y as usize].push(s.as_bytes()[i] as char); - } - lines.join("") - } -} - -struct Solution {} -fn main() { - println!("{}", Solution::convert("PAYPALISHIRING".to_string(), 3)); -} \ No newline at end of file diff --git a/rust/src/bin/p0009.rs b/rust/src/bin/p0009.rs deleted file mode 100644 index 4ecb473..0000000 --- a/rust/src/bin/p0009.rs +++ /dev/null @@ -1,13 +0,0 @@ -impl Solution { - pub fn is_palindrome(x: i32) -> bool { - if x < 0 { - return false; - } - let s = x.to_string(); - let rs: String = s.chars().rev().collect(); - return s == rs; - } -} - -struct Solution {} -fn main() {} \ No newline at end of file diff --git a/rust/src/bin/p0013.rs b/rust/src/bin/p0013.rs deleted file mode 100644 index b5f8a62..0000000 --- a/rust/src/bin/p0013.rs +++ /dev/null @@ -1,33 +0,0 @@ -impl Solution { - fn char_to_int(c: char) -> i32 { - match c { - 'I' => 1, - 'V' => 5, - 'X' => 10, - 'L' => 50, - 'C' => 100, - 'D' => 500, - 'M' => 1000, - _ => 0, - } - } - pub fn roman_to_int(s: String) -> i32 { - let mut sum = 0; - for i in 0..s.len() { - if i < s.len() - 1 { - if Self::char_to_int(s.as_bytes()[i as usize] as char) - < Self::char_to_int(s.as_bytes()[i+1 as usize] as char) { - sum = sum - Self::char_to_int(s.as_bytes()[i as usize] as char); - continue; - } - } - sum = sum + Self::char_to_int(s.as_bytes()[i as usize] as char); - } - sum - } -} - -struct Solution {} -fn main() { - println!("{}", Solution::roman_to_int("MCMXCIV".to_string())); -} \ No newline at end of file diff --git a/rust/src/bin/p0014.rs b/rust/src/bin/p0014.rs deleted file mode 100644 index e85ef8f..0000000 --- a/rust/src/bin/p0014.rs +++ /dev/null @@ -1,30 +0,0 @@ -impl Solution { - pub fn longest_common_prefix(strs: Vec) -> String { - if strs.is_empty() { return "".to_string(); } - let mut l: i32 = -1; - let mut brk = false; - for i in 0..strs[0].len() { - let c = strs[0].as_bytes()[i]; - for j in 1..strs.len() { - if strs[j].len() <= i || strs[j].as_bytes()[i] != c { - brk = true; - break; - } - } - if brk { break; } - l = l + 1; - } - if l < 0 { - return "".to_string(); - } - strs[0][0..(l+1) as usize].to_string() - } -} - -struct Solution {} -fn main() { - println!("{}", Solution::longest_common_prefix(vec![ - "fliower".to_string(), - "fliow".to_string(), - "fliight".to_string()])); -} \ No newline at end of file diff --git a/rust/src/bin/p0021.rs b/rust/src/bin/p0021.rs deleted file mode 100644 index d0ce9e6..0000000 --- a/rust/src/bin/p0021.rs +++ /dev/null @@ -1,60 +0,0 @@ -use leetcode::list::*; - -impl Solution { - pub fn merge_two_lists(list1: Option>, list2: Option>) -> Option> { - let mut p1 = &list1; - let mut p2 = &list2; - let mut result: Vec = vec!(); - loop { - let v1: i32; - let v2: i32; - match p1 { - None => { - match p2 { - None => break, - Some(px) => { - result.push(px.val); - p2 = &px.next; - continue; - } - } - }, - Some(p1) => { v1 = p1.val; }, - } - match p2 { - None => { - match p1 { - None => break, - Some(px) => { - result.push(px.val); - p1 = &px.next; - continue; - } - } - }, - Some(p2) => { v2 = p2.val; }, - } - if v1 <= v2 { - result.push(v1); - p1 = match p1 { - Some(px) => &px.next, - None => p1, - }; - } else { - result.push(v2); - p2 = match p2 { - Some(px) => &px.next, - None => p2, - }; - } - } - vector2list(result) - } -} - -struct Solution {} -fn main() { - println!("{:?}", list2vector( - Solution::merge_two_lists(vector2list(vec!(1,3,5)), - vector2list(vec!(2,4,6))))); -} \ No newline at end of file diff --git a/rust/src/bin/p0028.rs b/rust/src/bin/p0028.rs deleted file mode 100644 index c830ac4..0000000 --- a/rust/src/bin/p0028.rs +++ /dev/null @@ -1,20 +0,0 @@ -impl Solution { - pub fn str_str(haystack: String, needle: String) -> i32 { - if needle.len() > haystack.len() { return -1; } - for i in 0..haystack.len() - needle.len()+1 { - let mut failed = false; - for j in 0..needle.len() { - if haystack.as_bytes()[i+j] != needle.as_bytes()[j] { - failed = true; - break; - } - } - if !failed { return i as i32; } - } - -1 - } -} -struct Solution { } -fn main() { - println!("{}", Solution::str_str("abaaa".to_string(), "abb".to_string())); -} \ No newline at end of file diff --git a/rust/src/lib.rs b/rust/src/lib.rs deleted file mode 100644 index 651aed7..0000000 --- a/rust/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod list; \ No newline at end of file diff --git a/rust/src/list.rs b/rust/src/list.rs deleted file mode 100644 index d033cfe..0000000 --- a/rust/src/list.rs +++ /dev/null @@ -1,40 +0,0 @@ -#[derive(PartialEq, Eq, Clone, Debug)] -pub struct ListNode { - pub val: i32, - pub next: Option> -} -// -impl ListNode { - #[inline] - pub fn new(val: i32) -> Self { - ListNode { - next: None, - val - } - } -} - -pub fn vector2list(vec: Vec) -> Option> { - let mut result: Option> = None; - for i in 0..vec.len() { - let mut new_result = Some(Box::new(ListNode::new(vec[vec.len() - i - 1]))); - new_result.as_mut().unwrap().next = result; - result = new_result; - } - result -} - -pub fn list2vector(lst: Option>) -> Vec { - let mut result: Vec = Vec::new(); - let mut cur = &lst; - loop { - match cur { - None => break, - Some(node) => { - result.push(node.val); - cur = &node.next; - }, - } - } - result -} \ No newline at end of file diff --git a/rust/src/main.rs b/rust/src/main.rs deleted file mode 100644 index e7a11a9..0000000 --- a/rust/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, world!"); -} -- cgit v1.0