File tree Expand file tree Collapse file tree 7 files changed +257
-0
lines changed Expand file tree Collapse file tree 7 files changed +257
-0
lines changed Original file line number Diff line number Diff line change
1
+ cmake_minimum_required (VERSION 3.5)
2
+ project (cpp_0279)
3
+
4
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
5
+
6
+ set (SOURCE_FILES main3.cpp)
7
+ add_executable (cpp_0279 ${SOURCE_FILES} )
Original file line number Diff line number Diff line change
1
+ // / Source : https://leetcode.com/problems/perfect-squares/description/
2
+ // / Author : liuyubobobo
3
+ // / Time : 2017-11-17
4
+
5
+ #include < iostream>
6
+ #include < vector>
7
+ #include < queue>
8
+ #include < stdexcept>
9
+
10
+ using namespace std ;
11
+
12
+ // / BFS
13
+ // / Time Complexity: O(n)
14
+ // / Space Complexity: O(n)
15
+ class Solution {
16
+ public:
17
+ int numSquares (int n) {
18
+
19
+ if (n == 0 )
20
+ return 0 ;
21
+
22
+ queue<pair<int , int >> q;
23
+ q.push (make_pair (n, 0 ));
24
+
25
+ vector<bool > visited (n + 1 , false );
26
+ visited[n] = true ;
27
+
28
+ while (!q.empty ()){
29
+ int num = q.front ().first ;
30
+ int step = q.front ().second ;
31
+ q.pop ();
32
+
33
+ for (int i = 1 ; num - i * i >= 0 ; i ++){
34
+ int a = num - i * i;
35
+ if (!visited[a]){
36
+ if (a == 0 ) return step + 1 ;
37
+ q.push (make_pair (a, step + 1 ));
38
+ visited[a] = true ;
39
+ }
40
+ }
41
+ }
42
+
43
+ throw invalid_argument (" No Solution." );
44
+ }
45
+ };
46
+
47
+ int main () {
48
+
49
+ cout << Solution ().numSquares (12 ) << endl;
50
+ cout << Solution ().numSquares (13 ) << endl;
51
+
52
+ return 0 ;
53
+ }
Original file line number Diff line number Diff line change
1
+ // / Source : https://leetcode.com/problems/perfect-squares/description/
2
+ // / Author : liuyubobobo
3
+ // / Time : 2017-11-17
4
+
5
+ #include < iostream>
6
+ #include < vector>
7
+
8
+ using namespace std ;
9
+
10
+ // / Memory Search
11
+ // / Time Complexity: O(n)
12
+ // / Space Complexity: O(n)
13
+ class Solution {
14
+
15
+ public:
16
+ int numSquares (int n) {
17
+
18
+ vector<int > mem (n + 1 , -1 );
19
+
20
+ return numSquares (n, mem);
21
+ }
22
+
23
+ private:
24
+ int numSquares (int n, vector<int >& mem){
25
+
26
+ if (n == 0 )
27
+ return 0 ;
28
+
29
+ if (mem[n] != -1 )
30
+ return mem[n];
31
+
32
+ int res = INT_MAX;
33
+ for (int i = 1 ; n - i * i >= 0 ; i ++ )
34
+ res = min (res, 1 + numSquares (n - i * i, mem));
35
+ return mem[n] = res;
36
+ }
37
+ };
38
+
39
+ int main () {
40
+
41
+ cout << Solution ().numSquares (12 ) << endl;
42
+ cout << Solution ().numSquares (13 ) << endl;
43
+
44
+ return 0 ;
45
+ }
Original file line number Diff line number Diff line change
1
+ // / Source : https://leetcode.com/problems/perfect-squares/description/
2
+ // / Author : liuyubobobo
3
+ // / Time : 2017-11-17
4
+
5
+ #include < iostream>
6
+ #include < vector>
7
+
8
+ using namespace std ;
9
+
10
+ // / Dynamic Programming
11
+ // / Time Complexity: O(n)
12
+ // / Space Complexity: O(n)
13
+ class Solution {
14
+
15
+ public:
16
+ int numSquares (int n) {
17
+
18
+ vector<int > mem (n + 1 , INT_MAX);
19
+ mem[0 ] = 0 ;
20
+ for (int i = 1 ; i <= n ; i ++)
21
+ for (int j = 1 ; i - j * j >= 0 ; j ++)
22
+ mem[i] = min (mem[i], 1 + mem[i - j * j]);
23
+
24
+ return mem[n];
25
+ }
26
+ };
27
+
28
+ int main () {
29
+
30
+ cout << Solution ().numSquares (12 ) << endl;
31
+ cout << Solution ().numSquares (13 ) << endl;
32
+
33
+ return 0 ;
34
+ }
Original file line number Diff line number Diff line change
1
+ /// Source : https://leetcode.com/problems/perfect-squares/description/
2
+ /// Author : liuyubobobo
3
+ /// Time : 2017-11-17
4
+
5
+ import java .util .LinkedList ;
6
+ import javafx .util .Pair ;
7
+
8
+ /// BFS
9
+ /// Time Complexity: O(n)
10
+ /// Space Complexity: O(n)
11
+ public class Solution1 {
12
+
13
+ public int numSquares (int n ) {
14
+
15
+ if (n == 0 )
16
+ return 0 ;
17
+
18
+ LinkedList <Pair <Integer , Integer >> queue = new LinkedList <Pair <Integer , Integer >>();
19
+ queue .addLast (new Pair <Integer , Integer >(n , 0 ));
20
+
21
+ boolean [] visited = new boolean [n +1 ];
22
+ visited [n ] = true ;
23
+
24
+ while (!queue .isEmpty ()){
25
+ Pair <Integer , Integer > front = queue .removeFirst ();
26
+ int num = front .getKey ();
27
+ int step = front .getValue ();
28
+
29
+ if (num == 0 )
30
+ return step ;
31
+
32
+ for (int i = 1 ; num - i *i >= 0 ; i ++){
33
+ int a = num - i *i ;
34
+ if (!visited [a ]){
35
+ if (a == 0 ) return step + 1 ;
36
+ queue .addLast (new Pair (num - i * i , step + 1 ));
37
+ visited [num - i * i ] = true ;
38
+ }
39
+ }
40
+ }
41
+
42
+ throw new IllegalStateException ("No Solution." );
43
+ }
44
+
45
+ public static void main (String [] args ) {
46
+
47
+ System .out .println ((new Solution1 ()).numSquares (12 ));
48
+ System .out .println ((new Solution1 ()).numSquares (13 ));
49
+ }
50
+ }
Original file line number Diff line number Diff line change
1
+ /// Source : https://leetcode.com/problems/perfect-squares/description/
2
+ /// Author : liuyubobobo
3
+ /// Time : 2017-11-17
4
+
5
+ import java .util .Arrays ;
6
+
7
+ /// Memory Search
8
+ /// Time Complexity: O(n)
9
+ /// Space Complexity: O(n)
10
+ public class Solution2 {
11
+
12
+ public int numSquares (int n ) {
13
+
14
+ int [] mem = new int [n +1 ];
15
+ Arrays .fill (mem , -1 );
16
+
17
+ return numSquares (n , mem );
18
+ }
19
+
20
+ private int numSquares (int n , int [] mem ){
21
+
22
+ if (n == 0 )
23
+ return 0 ;
24
+
25
+ if (mem [n ] != -1 )
26
+ return mem [n ];
27
+
28
+ int res = Integer .MAX_VALUE ;
29
+ for (int i = 1 ; n - i * i >= 0 ; i ++ )
30
+ res = Math .min (res , 1 + numSquares (n - i * i , mem ));
31
+ return mem [n ] = res ;
32
+ }
33
+
34
+ public static void main (String [] args ) {
35
+
36
+ System .out .println ((new Solution2 ()).numSquares (12 ));
37
+ System .out .println ((new Solution2 ()).numSquares (13 ));
38
+ }
39
+ }
Original file line number Diff line number Diff line change
1
+ /// Source : https://leetcode.com/problems/perfect-squares/description/
2
+ /// Author : liuyubobobo
3
+ /// Time : 2017-11-17
4
+
5
+ import java .util .Arrays ;
6
+
7
+ /// Dynamic Programming
8
+ /// Time Complexity: O(n)
9
+ /// Space Complexity: O(n)
10
+ public class Solution3 {
11
+
12
+ public int numSquares (int n ) {
13
+
14
+ int [] mem = new int [n +1 ];
15
+ Arrays .fill (mem , Integer .MAX_VALUE );
16
+ mem [0 ] = 0 ;
17
+ for (int i = 1 ; i <= n ; i ++)
18
+ for (int j = 1 ; i - j * j >= 0 ; j ++)
19
+ mem [i ] = Math .min (mem [i ], 1 + mem [i - j * j ]);
20
+
21
+ return mem [n ];
22
+ }
23
+
24
+ public static void main (String [] args ) {
25
+
26
+ System .out .println ((new Solution3 ()).numSquares (12 ));
27
+ System .out .println ((new Solution3 ()).numSquares (13 ));
28
+ }
29
+ }
You can’t perform that action at this time.
0 commit comments