58. 最后一个单词的长度
pub struct Solution {}
impl Solution {
pub fn length_of_last_word(s: String) -> i32 {
let seq: Vec<char> = s.chars().rev().collect();
let mut result = 0;
let mut b_started = false;
for ch in seq {
if ch == ' ' && b_started {
break;
}
if ch != ' ' {
b_started = true;
result += 1;
}
}
return result as i32;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_53() {
assert_eq!(Solution::length_of_last_word("Hello World".to_owned()), 5);
assert_eq!(Solution::length_of_last_word(" ".to_owned()), 0);
assert_eq!(Solution::length_of_last_word("".to_owned()), 0);
assert_eq!(Solution::length_of_last_word(" rrrrr ".to_owned()), 5);
}
}
66. 加一
pub struct Solution {}
impl Solution {
pub fn plus_one(digits: Vec<i32>) -> Vec<i32> {
let mut digits = digits;
let mut carry = 0;
for i in (0..digits.len()).rev() {
digits[i] = if digits[i] == 9 {
carry = 1;
0
} else {
carry = 0;
digits[i] + 1
};
if carry == 0 {
break;
}
}
if carry > 0 {
digits.insert(0, 1);
}
digits
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_66() {
assert_eq!(Solution::plus_one(vec![0]), vec![1]);
assert_eq!(Solution::plus_one(vec![9, 9, 9, 9]), vec![1, 0, 0, 0, 0]);
assert_eq!(
Solution::plus_one(vec![1, 0, 9, 9, 9, 9]),
vec![1, 1, 0, 0, 0, 0]
);
}
}
70. 爬楼梯
pub struct Solution {}
impl Solution {
pub fn climb_stairs(n: i32) -> i32 {
let n = n as usize;
if n <= 2 {
return n as i32;
}
let (mut prev, mut curr) = (1, 2);
for i in 2..n {
let next = prev + curr;
prev = curr;
curr = next;
}
curr
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[test]
fn test_70() {
assert_eq!(Solution::climb_stairs(3), 3);
assert_eq!(Solution::climb_stairs(4), 5);
assert_eq!(Solution::climb_stairs(5), 8);
}
}
88. 合并两个有序数组
pub struct Solution {}
impl Solution {
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
let mut i = m - 1;
let mut j = n - 1;
let mut z = m + n - 1;
while z >= 0 {
if i >= 0 && (j < 0 || nums1[i as usize] >= nums2[j as usize]) {
nums1[z as usize] = nums1[i as usize];
i -= 1;
} else {
nums1[z as usize] = nums2[j as usize];
j -= 1;
}
z -= 1;
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_88() {
let mut vec1 = vec![1, 2, 3, 0, 0, 0];
let mut vec2 = vec![2, 5, 6];
Solution::merge(&mut vec1, 3, &mut vec2, 3);
assert_eq!(vec1, vec![1, 2, 2, 3, 5, 6]);
let mut vec1 = vec![1, 2, 3];
let mut vec2 = vec![];
Solution::merge(&mut vec1, 3, &mut vec2, 0);
assert_eq!(vec1, vec![1, 2, 3]);
let mut vec1 = vec![0, 0, 0];
let mut vec2 = vec![1, 2, 3];
Solution::merge(&mut vec1, 0, &mut vec2, 3);
assert_eq!(vec1, vec![1, 2, 3]);
}
}
118. 杨辉三角
pub struct Solution {}
impl Solution {
pub fn generate(num_rows: i32) -> Vec<Vec<i32>> {
let mut res = Vec::new();
if num_rows < 1 {
return res;
}
let mut curr = vec![1];
for _ in 0..num_rows {
let mut next = vec![1; curr.len() + 1];
for i in 1..curr.len() {
next[i] = curr[i - 1] + curr[i];
}
res.push(curr);
curr = next;
}
res
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_118() {
assert_eq!(Solution::generate(1), vec![vec![1]]);
assert_eq!(
Solution::generate(5),
vec![
vec![1],
vec![1, 1],
vec![1, 2, 1],
vec![1, 3, 3, 1],
vec![1, 4, 6, 4, 1]
]
);
}
}