46. 全排列
class Solution {
List<List<Integer>> res=new ArrayList<>();
List<Integer> path=new ArrayList<>();
public List<List<Integer>> permute(int[] nums){
int[] used=new int[nums.length];
backtracking(nums,used);
return res;
}
public void backtracking(int[] nums,int[] used){
if(path.size()==nums.length){
res.add(new ArrayList<>(path));
return;
}
for(int i=0;i<nums.length;i++){
if(used[i]==1) continue;
path.add(nums[i]);
used[i]=1;
backtracking(nums,used);
path.remove(path.size()-1);
used[i]=0;
}
}
}
47. 全排列 II
class Solution {
List<List<Integer>> res=new ArrayList<>();
List<Integer> path=new ArrayList<>();
public List<List<Integer>> permuteUnique(int[] nums) {
int[] used=new int[nums.length];
Arrays.sort(nums);
backtracking(nums,used);
return res;
}
public void backtracking(int[] nums,int[] used){
if(path.size()==nums.length){
res.add(new ArrayList<>(path));
return;
}
for(int i=0;i<nums.length;i++){
if(used[i]==1 || (i>0 && nums[i]==nums[i-1]&&used[i-1]==1)){
continue;
}
path.add(nums[i]);
used[i]=1;
backtracking(nums,used);
path.remove(path.size()-1);
used[i]=0;
}
}
}
51. N 皇后
class Solution {
List<List<String>> res=new ArrayList<>();
List<String> path=new ArrayList<>();
public List<List<String>> solveNQueens(int n) {
char[][] queue=new char[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
queue[i][j]='.';
}
}
backtracking(queue,0);
return res;
}
public void backtracking(char[][] queue,int row){
if(row==queue.length){
path=new ArrayList<>();
for(char[] c:queue){
path.add(String.valueOf(c));
}
res.add(path);
return;
}
for(int j=0;j<queue[0].length;j++){
if(isV(row,j,queue,queue.length)){
queue[row][j]='Q';
backtracking(queue,row+1);
queue[row][j]='.';
}
}
}
public boolean isV(int i,int j,char[][] queue,int length){
for(int m=0;m<i;m++){
if(queue[m][j]=='Q') return false;
}
for(int m=i,n=j;m>=0&&n>=0;m--,n--){
if(queue[m][n]=='Q') return false;
}
for(int m=i,n=j;m>=0&&n<length;m--,n++){
if(queue[m][n]=='Q') return false;
}
return true;
}
}
203. 移除链表元素
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode tempcur=new ListNode(0,head);
ListNode cur=head;
while(head!=null && head.val==val){
head=head.next;
}
while(cur!=null){
if(cur.val==val){
tempcur.next=cur.next;
}else{
tempcur=cur;
}
cur=cur.next;
}
return head;
}
}
707. 设计链表
class ListNode{
int val;
ListNode next;
public ListNode(){}
public ListNode(int val){
this.val=val;
}
}
class MyLinkedList {
int size;
ListNode head;
public MyLinkedList() {
head = new ListNode(0);
size = 0;
}
public int get(int index) {
if(index<0 || index>=size) return -1;
int count=0;
ListNode cur=head;
while(count!=index+1){
cur=cur.next;
count++;
}
return cur.val;
}
public void addAtHead(int val) {
addAtIndex(0,val);
}
public void addAtTail(int val) {
addAtIndex(size,val);
}
public void addAtIndex(int index, int val) {
if(index > size){
return;
}
size++;
ListNode cur = head;
if(size >= index && size > 0) {
for (int i = 0; i < index; i++) {
cur = cur.next;
}
ListNode addNode = new ListNode(val);
addNode.next = cur.next;
cur.next = addNode;
}
if(index < 0){
ListNode addNode2 = new ListNode(val);
addNode2.next = head.next;
head.next = addNode2;
}
}
public void deleteAtIndex(int index) {
if(index<0||index>=size) return;
ListNode cur=head;
for(int i=0;i<index;i++){
cur=cur.next;
}
cur.next=cur.next.next;
size--;
}
}