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 cb364a5

Browse files
solves #51: N-Queens in java
1 parent b7c02bd commit cb364a5

File tree

4 files changed

+115
-65
lines changed

4 files changed

+115
-65
lines changed

β€ŽREADME.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
| 48 | [Rotate Image](https://leetcode.com/problems/rotate-image) | [![Java](assets/java.png)](src/RotateImage.java) | |
5858
| 49 | [Group Anagrams](https://leetcode.com/problems/group-anagrams) | [![Java](assets/java.png)](src/GroupAnagrams.java) | |
5959
| 50 | [Pow(x,n)](https://leetcode.com/problems/powx-n) | [![Java](assets/java.png)](src/Powxn.java) | |
60+
| 51 | [N-Queens](https://leetcode.com/problems/n-queens) | [![Java](assets/java.png)](src/NQueens.java) | |
6061
| 53 | [Maximum SubArray](https://leetcode.com/problems/maximum-subarray) | [![Java](assets/java.png)](src/MaximumSubArray.java) [![Python](assets/python.png)](python/maximum_sum_subarray.py) | |
6162
| 54 | [Spiral Matrix](https://leetcode.com/problems/spiral-matrix) | [![Java](assets/java.png)](src/SpiralMatrix.java) | |
6263
| 55 | [Jump Game](https://leetcode.com/problems/jump-game) | [![Java](assets/java.png)](src/JumpGame.java) | |

β€Žsrc/CombinationSum.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// https://leetcode.com/problems/combination-sum
2-
// T: O(|candidates| ^ target)
3-
// S: O(target + candidate ^ 2) // not sure tho --> if anyone has any idea please feel free to contact me
2+
// M = smallest candidate
3+
// T: O(|candidates| ^ (target / M))
4+
// S: O(target / M) // not sure tho --> if anyone has any idea please feel free to contact me
45

56
import java.util.ArrayList;
67
import java.util.List;

β€Žsrc/HelloWorld.java

Lines changed: 15 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -8,73 +8,25 @@
88
import java.util.Set;
99

1010
public class HelloWorld {
11-
// T: O(V + E) S: O(V + E)
12-
public int[] findOrder(int numCourses, int[][] prerequisites) {
13-
final Map<Integer, Set<Integer>> graph = createGraph(prerequisites);
14-
final int[] inDegree = computeInDegree(numCourses, prerequisites);
15-
return orderOfCourses(graph, inDegree);
11+
public List<List<Integer>> combinationSum(int[] candidates, int target) {
12+
final Set<List<Integer>> result = new HashSet<>();
13+
computeSums(candidates, target, result, 0, new ArrayList<>(), 0);
14+
return new ArrayList<>(result);
1615
}
1716

18-
// T: O(V + E) S: O(V)
19-
private static int[] orderOfCourses(Map<Integer, Set<Integer>> graph, int[] inDegree) {
20-
final Queue<Integer> queue = new PriorityQueue<>();
21-
final List<Integer> order = new ArrayList<>();
22-
addAll0InDegreeToQueue(queue, inDegree);
23-
24-
while (!queue.isEmpty()) {
25-
final int vertex = queue.poll();
26-
order.add(vertex);
27-
for (int neighbour : graph.getOrDefault(vertex, new HashSet<>())) {
28-
inDegree[neighbour]--;
29-
if (inDegree[neighbour] == 0) {
30-
queue.add(neighbour);
31-
}
32-
}
33-
graph.remove(vertex);
17+
private static void computeSums(int[] candidates, int target, Set<List<Integer>> result, int currentSum, List<Integer> current, int i) {
18+
if (currentSum > target || i >= candidates.length) {
19+
return;
3420
}
35-
36-
if (order.size() != inDegree.length) {
37-
returnnewint[] {};
21+
if (currentSum == target) {
22+
result.add(newArrayList<>(current));
23+
return;
3824
}
39-
return toArray(order);
40-
}
4125

42-
private static int[] toArray(List<Integer> list) {
43-
final int[] array = new int[list.size()];
44-
for (int i = 0 ; i < array.length ; i++) {
45-
array[i] = list.get(i);
46-
}
47-
return array;
48-
}
49-
50-
// T: O(E) S: O(1)
51-
private static void addAll0InDegreeToQueue(Queue<Integer> queue, int[] inDegree) {
52-
for (int i = 0 ; i < inDegree.length ; i++) {
53-
if (inDegree[i] == 0) {
54-
queue.add(i);
55-
}
56-
}
57-
}
58-
59-
// T: O(E) S: O(E)
60-
private static int[] computeInDegree(int n, int[][] edges) {
61-
final int[] inDegree = new int[n];
62-
for (int[] edge : edges) {
63-
final int to = edge[0];
64-
inDegree[to]++;
65-
}
66-
return inDegree;
67-
}
68-
69-
// T: O(|E|), S: O(E)
70-
private static Map<Integer, Set<Integer>> createGraph(int[][] edges) {
71-
final Map<Integer, Set<Integer>> graph = new HashMap<>();
72-
for (int[] edge : edges) {
73-
final int to = edge[0], from = edge[1];
74-
final Set<Integer> set = graph.getOrDefault(from, new HashSet<>());
75-
set.add(to);
76-
graph.putIfAbsent(from, set);
77-
}
78-
return graph;
26+
computeSums(candidates, target, result, currentSum, current, i + 1);
27+
current.add(candidates[i]);
28+
computeSums(candidates, target, result, currentSum + candidates[i], current, i);
29+
computeSums(candidates, target, result, currentSum + candidates[i], current, i + 1);
30+
current.removeLast();
7931
}
8032
}

β€Žsrc/NQueens.java

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// https://leetcode.com/problems/n-queens
2+
// T: O(N!)
3+
// S: O(N^2)
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class NQueens {
9+
private static boolean[] rows, columns;
10+
11+
public static List<List<String>> solveNQueens(int n) {
12+
final List<List<String>> result = new ArrayList<>();
13+
final List<String> board = getEmptyBoard(n);
14+
rows = new boolean[n];
15+
columns = new boolean[n];
16+
nQueens(0, n, result, board, 0);
17+
return result;
18+
}
19+
20+
private static void nQueens(int row, int n, List<List<String>> result, List<String> board, int queens) {
21+
if (row == n) {
22+
if (queens == n) {
23+
result.add(new ArrayList<>(board));
24+
}
25+
return;
26+
}
27+
28+
for (int column = 0 ; column < n ; column++) {
29+
if (canPlace(board, row, column)) {
30+
placeQueen(board, row, column);
31+
nQueens(row + 1, n, result, board, queens + 1);
32+
removeQueen(board, row, column);
33+
}
34+
}
35+
}
36+
37+
private static void placeQueen(List<String> board, int row, int column) {
38+
board.set(
39+
row,
40+
board.get(row).substring(0, column) + 'Q' + board.get(row).substring(column + 1)
41+
);
42+
rows[row] = true;
43+
columns[column] = true;
44+
}
45+
46+
private static void removeQueen(List<String> board, int row, int column) {
47+
board.set(
48+
row,
49+
board.get(row).substring(0, column) + '.' + board.get(row).substring(column + 1)
50+
);
51+
rows[row] = false;
52+
columns[column] = false;
53+
}
54+
55+
private static boolean canPlace(List<String> board, int row, int column) {
56+
return !rows[row] && !columns[column] && !queenInLeftDiagonal(board, row, column)
57+
&& !queenInRightDiagonal(board, row, column);
58+
}
59+
60+
private static boolean queenInLeftDiagonal(List<String> board, int row, int column) {
61+
for (int i = row - 1, j = column - 1 ; i >= 0 && j >= 0 ; i--, j--) {
62+
if (board.get(i).charAt(j) == 'Q') {
63+
return true;
64+
}
65+
}
66+
for (int i = row + 1, j = column + 1 ; i < board.size() && j < board.size() ; i++, j++) {
67+
if (board.get(i).charAt(j) == 'Q') {
68+
return true;
69+
}
70+
}
71+
return false;
72+
}
73+
74+
private static boolean queenInRightDiagonal(List<String> board, int row, int column) {
75+
for (int i = row - 1, j = column + 1 ; i >= 0 && j < board.size() ; i--, j++) {
76+
if (board.get(i).charAt(j) == 'Q') {
77+
return true;
78+
}
79+
}
80+
for (int i = row + 1, j = column - 1 ; i < board.size() && j >= 0 ; i++, j--) {
81+
if (board.get(i).charAt(j) == 'Q') {
82+
return true;
83+
}
84+
}
85+
return false;
86+
}
87+
88+
private static List<String> getEmptyBoard(int n) {
89+
final List<String> board = new ArrayList<>();
90+
final String line = ".".repeat(n);
91+
for (int i = 0 ; i < n ; i++) {
92+
board.add(line);
93+
}
94+
return board;
95+
}
96+
}

0 commit comments

Comments
(0)

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /