summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--src/bin/p0002.rs88
-rw-r--r--src/bin/p0003.rs34
3 files changed, 123 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index ea8c4bf..2a0038a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/target
+.idea \ No newline at end of file
diff --git a/src/bin/p0002.rs b/src/bin/p0002.rs
new file mode 100644
index 0000000..ac028a2
--- /dev/null
+++ b/src/bin/p0002.rs
@@ -0,0 +1,88 @@
+#[derive(PartialEq, Eq, Clone, Debug)]
+pub struct ListNode {
+ pub val: i32,
+ pub next: Option<Box<ListNode>>
+}
+
+impl ListNode {
+ #[inline]
+ fn new(val: i32) -> Self {
+ ListNode {
+ next: None,
+ val
+ }
+ }
+}
+
+struct Solution {}
+
+impl Solution {
+ pub fn add_two_numbers(l1: Option<Box<ListNode>>, l2: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
+ let mut result: Option<Box<ListNode>> = 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 vector2list(vec: Vec<i32>) -> Option<Box<ListNode>> {
+ let mut result: Option<Box<ListNode>> = 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
+}
+
+fn list2vector(lst: Option<Box<ListNode>>) -> Vec<i32> {
+ let mut result: Vec<i32> = Vec::new();
+ let mut cur = &lst;
+ loop {
+ match cur {
+ None => break,
+ Some(node) => {
+ result.push(node.val);
+ cur = &node.next;
+ },
+ }
+ }
+ result
+}
+
+fn test(l1: Vec<i32>, l2: Vec<i32>) -> Vec<i32> {
+ list2vector(Solution::add_two_numbers(vector2list(l1), vector2list(l2)))
+}
+
+fn main() {
+ println!("{:?}", test(vec![1,2,3], vec![4,5,6]));
+}
diff --git a/src/bin/p0003.rs b/src/bin/p0003.rs
new file mode 100644
index 0000000..7293c13
--- /dev/null
+++ b/src/bin/p0003.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