Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 878a916

Browse files
committed
update
1 parent 277c0a9 commit 878a916

File tree

6 files changed

+201
-1
lines changed

6 files changed

+201
-1
lines changed

‎src/combination_sum_two.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
pub struct Solution {}
2+
impl Solution {
3+
pub fn combination_sum2(mut candidates: Vec<i32>, target: i32) -> Vec<Vec<i32>> {
4+
fn rec(
5+
mut i: usize,
6+
candidates: &Vec<i32>,
7+
subset: &mut Vec<i32>,
8+
res: &mut Vec<Vec<i32>>,
9+
target: i32,
10+
sum: i32,
11+
) {
12+
if i >= candidates.len() || sum > target {
13+
return;
14+
}
15+
if sum == target {
16+
res.push(subset.to_vec().clone());
17+
return;
18+
}
19+
subset.push(candidates[i]);
20+
rec(i + 1, candidates, subset, res, target, sum + candidates[i]);
21+
subset.pop();
22+
while i + 1 < candidates.len() && candidates[i] == candidates[i + 1] {
23+
i = i + 1;
24+
}
25+
rec(i + 1, candidates, subset, res, target, sum);
26+
}
27+
candidates.sort();
28+
let mut res: Vec<Vec<i32>> = Vec::new();
29+
let mut subset: Vec<i32> = Vec::new();
30+
rec(0, &candidates, &mut subset, &mut res, target, 0);
31+
res
32+
}
33+
}

‎src/letter_phone_cominations.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
pub struct Solution {}
2+
impl Solution {
3+
pub fn letter_combinations(digits: String) -> Vec<String> {
4+
use std::collections::HashMap;
5+
let mut number_combos = HashMap::new();
6+
7+
number_combos.insert('2', "abc");
8+
number_combos.insert('3', "def");
9+
number_combos.insert('4', "ghi");
10+
number_combos.insert('5', "jkl");
11+
number_combos.insert('6', "mno");
12+
number_combos.insert('7', "pqrs");
13+
number_combos.insert('8', "tuv");
14+
number_combos.insert('9', "wxyz");
15+
16+
fn rec(
17+
i: usize,
18+
map: &HashMap<char, &str>,
19+
digits: &Vec<char>,
20+
set: String,
21+
res: &mut Vec<String>,
22+
) {
23+
if set.len() == digits.len() {
24+
res.push(set.clone().to_string());
25+
return;
26+
}
27+
let digit = digits[i];
28+
for c in map.get(&digit).unwrap().chars() {
29+
let mut new_set = set.clone();
30+
new_set.push(c);
31+
rec(i + 1, map, digits, new_set, res);
32+
}
33+
}
34+
35+
let mut res = Vec::new();
36+
if digits == "" {
37+
return Vec::new();
38+
}
39+
let digits: Vec<char> = digits.chars().collect();
40+
rec(0, &number_combos, &digits, String::new(), &mut res);
41+
res
42+
}
43+
}

‎src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
mod subsets_two;
1+
mod n_queens;
22
fn main() {}

‎src/n_queens.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
pub struct Solution {}
2+
impl Solution {
3+
pub fn solve_n_queens(n: i32) -> Vec<Vec<String>> {
4+
use std::collections::HashSet;
5+
let mut cols = HashSet::new();
6+
let mut neg = HashSet::new();
7+
let mut pos = HashSet::new();
8+
let mut res: Vec<Vec<String>> = Vec::new();
9+
let mut sub: Vec<String> = Vec::new();
10+
for i in 0..n as usize {
11+
sub[i] = String::from("....");
12+
}
13+
fn rec(
14+
cols: &mut HashSet<i32>,
15+
neg: &mut HashSet<i32>,
16+
pos: &mut HashSet<i32>,
17+
row: i32,
18+
n: i32,
19+
sub: &mut Vec<String>,
20+
res: &mut Vec<Vec<String>>,
21+
) {
22+
if row > n {
23+
res.push(sub.clone());
24+
return;
25+
}
26+
for i in 0..n {
27+
if cols.contains(&i) || neg.contains(&(row - i)) || pos.contains(&(i + row)) {
28+
continue;
29+
}
30+
31+
let mut chars: Vec<char> = sub[row as usize].chars().collect();
32+
chars[i as usize] = 'Q';
33+
cols.insert(i);
34+
neg.insert(row - i);
35+
pos.insert(i - row);
36+
sub[row as usize] = chars.clone().into_iter().collect();
37+
rec(cols, neg, pos, row + 1, n, sub, res);
38+
cols.remove(&i);
39+
neg.remove(&(row - i));
40+
pos.remove(&(i - row));
41+
chars[i as usize] = '.';
42+
sub[row as usize] = chars.clone().into_iter().collect();
43+
}
44+
}
45+
rec(&mut cols, &mut neg, &mut pos, 0, n, &mut sub, &mut res);
46+
res
47+
}
48+
}

‎src/palindrome_partition.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
pub struct Solution {}
2+
impl Solution {
3+
pub fn partition(s: String) -> Vec<Vec<String>> {
4+
fn rec(i: usize, part: &mut Vec<String>, res: &mut Vec<Vec<String>>, s: &String) {
5+
if i > s.len() {
6+
res.push(part.to_vec().clone());
7+
}
8+
for j in i..s.len() {
9+
if Self::is_palindrome(s, i, j) {
10+
part.push(s[i..j + 1].to_string());
11+
rec(i, part, res, s);
12+
}
13+
}
14+
}
15+
16+
let mut part = Vec::new();
17+
let mut res = Vec::new();
18+
rec(0, &mut part, &mut res, &s);
19+
res
20+
}
21+
22+
fn is_palindrome(s: &String, mut l: usize, mut r: usize) -> bool {
23+
while l < r {
24+
if s.chars().nth(l) != s.chars().nth(r) {
25+
return false;
26+
}
27+
l += 1;
28+
r -= 1;
29+
}
30+
true
31+
}
32+
}

‎src/word_search.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
use std::collections::HashSet;
2+
3+
pub struct Solution {}
4+
impl Solution {
5+
pub fn exist(board: Vec<Vec<char>>, word: String) -> bool {
6+
fn rec(
7+
i: usize,
8+
x: i32,
9+
y: i32,
10+
board: &Vec<Vec<char>>,
11+
word: &String,
12+
path: &mut HashSet<(i32, i32)>,
13+
) -> bool {
14+
if i == word.len() {
15+
return true;
16+
}
17+
if x < 0
18+
|| y < 0
19+
|| x as usize >= board.len()
20+
|| y as usize >= board[0].len()
21+
|| path.contains(&(x, y))
22+
|| word.chars().nth(i).unwrap() != board[x as usize][y as usize]
23+
{
24+
return false;
25+
}
26+
path.insert((x, y));
27+
let res = rec(i + 1, x + 1, y, board, word, path)
28+
|| rec(i + 1, x, y + 1, board, word, path)
29+
|| rec(i + 1, x - 1, y, board, word, path)
30+
|| rec(i + 1, x, y - 1, board, word, path);
31+
path.remove(&(x, y));
32+
res
33+
}
34+
let mut path: HashSet<(i32, i32)> = HashSet::new();
35+
for x in 0..board.len() {
36+
for y in 0..board[0].len() {
37+
if rec(0, x as i32, y as i32, &board, &word, &mut path) {
38+
return true;
39+
}
40+
}
41+
}
42+
false
43+
}
44+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /