Skip to content

Commit 4e09d93

Browse files
committed
Solve #279
1 parent a0748b3 commit 4e09d93

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -214,3 +214,4 @@ mod n0268_missing_number;
214214
mod n0273_integer_to_english_words;
215215
mod n0274_h_index;
216216
mod n0275_h_index_ii;
217+
mod n0279_perfect_squares;

src/n0279_perfect_squares.rs

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* [279] Perfect Squares
3+
*
4+
* Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.
5+
*
6+
* Example 1:
7+
*
8+
*
9+
* Input: n = 12
10+
* Output: 3
11+
* Explanation: 12 = 4 + 4 + 4.
12+
*
13+
* Example 2:
14+
*
15+
*
16+
* Input: n = 13
17+
* Output: 2
18+
* Explanation: 13 = 4 + 9.
19+
*/
20+
pub struct Solution {}
21+
22+
// submission codes start here
23+
24+
// BFS
25+
use std::collections::VecDeque;
26+
impl Solution {
27+
pub fn num_squares(n: i32) -> i32 {
28+
if n < 1 { return 0 }
29+
let mut deq = VecDeque::new();
30+
deq.push_back((1,n));
31+
while let Some((level, num)) = deq.pop_front() {
32+
let mut base = 1;
33+
while base * base <= num {
34+
if base * base == num {
35+
return level
36+
}
37+
deq.push_back((level + 1, num - base * base));
38+
base += 1;
39+
}
40+
}
41+
0
42+
}
43+
}
44+
45+
// submission codes end
46+
47+
#[cfg(test)]
48+
mod tests {
49+
use super::*;
50+
51+
#[test]
52+
fn test_279() {
53+
assert_eq!(Solution::num_squares(13), 2);
54+
assert_eq!(Solution::num_squares(12), 3);
55+
}
56+
}

0 commit comments

Comments
 (0)