1.移除指定元素,返回新数组的长度
public static int removeElement(int[] nums,int target){
int index=0;
for (int i = 0; i <nums.length ; ++i) {
if(nums[i]!=target){
nums[index++]=nums[i];
}
}
return index;
}
2.将数组中的零移动到数组末尾
public static int[] moveZeroes(int[] nums){
int index=0;
for (int i = 0; i <nums.length ; ++i) {
if(nums[i]!=0){
nums[index++]=nums[i];
}
}
for (int i = index; i <nums.length ; ++i) {
nums[i]=0;
}
return nums;
}
3.从第二个元素开始排列
public static void nextPermutation(int[] nums){
nextPermutation(nums,0,nums.length);
}
private static boolean nextPermutation(int[] nums,int begin,int end){
int p = end-2;
while (p>-1 && nums[p]>=nums[p+1]) --p;
if(p==-1){
reverse(nums,begin,end);
return false;
}
int c=end-1;
while (c>0 && nums[c]<=nums[p]) --c;
swap(nums,p,c);
reverse(nums,p+1,end);
return true;
}
private static void reverse(int[] nums, int begin, int end) {
end--;
while (begin<end){
swap(nums,begin++,end--);
}
}
private static void swap(int[] nums, int i, int j) {
int tmp=nums[i];
nums[i]=nums[j];
nums[j]=tmp;
}
4.全排列
public static void permute(int[] nums,int l,int r){
if(l==r){
System.out.println(Arrays.toString(nums));
}else{
for(int i=l;i<r;i++){
swap(nums,l,i);
permute(nums,l+1,r);
swap(nums,l,i);
}
}
}
private static void swap(int[] nums, int i, int j) {
int tmp=nums[i];
nums[i]=nums[j];
nums[j]=tmp;
}
5.数独
public boolean isValidSudoku(char[][] board){
boolean[] used = new boolean[9];
for (int i = 0; i <9 ; i++) {
Arrays.fill(used,false);
for (int j = 0; j <9; j++) {
if(!check(board[i][j],used))
return false;
}
Arrays.fill(used,false);
for (int j = 0; j <9 ; j++) {
if(!check(board[j][i],used))
return false;
}
}
for (int i = 0; i <3 ; i++) {
for (int j = 0; j <3 ; j++) {
Arrays.fill(used,false);
for (int k = i*3; k <i*3+3 ; k++) {
for (int l = j*3; l <j*3+3 ; l++) {
if(!check(board[k][l],used))
return false;
}
}
}
}
return true;
}
private boolean check(char c, boolean[] used) {
if(c=='.') return true;
if(used[c-'1']) return false;
return used[c-'1'] = true;
}