High level:
public class Solution {
public List<List<Integer>> nqueens(int n) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> cur = new ArrayList<>();
helper(result, cur, n);
return result;
}
private void helper(List<List<Integer>> result, List<Integer> cur, int n) {
// base case
if (cur.size() == n) {
result.add(new ArrayList<Integer>(cur));
return;
}
for (int i = 0; i < n; i++) {
if (isValid(i, cur)) {
cur.add(i);
helper(result, cur, n);
cur.remove(cur.size() - 1);
}
}
}
private boolean isValid(int column, List<Integer> cur) {
int row = cur.size();
for (int i = 0; i < row; i++) {
if (cur.get(i) == column) {
return false;
}
if (Math.abs(cur.get(i) - column) == row - i) {
return false;
}
}
return true;
}
}