class Solution {
public void solveSudoku(char[][] board) {
backtracking(board);
}
public boolean backtracking(char[][] board){
//遍历行
for( int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
//跳过原始数据
if(board[i][j] != '.') continue;
//判断这个位置放k是否合适
for(char k = '1' ; k<= '9';k++){
if(isValiable(board,i,j,k)){
board[i][j] = k;
//回溯
//如果找到合适的一组立刻返回
if(backtracking(board)) return true;
board[i][j] = '.';
}
}
return false;//九个数都试完了
}
}
return true;//没有false
}
public boolean isValiable(char[][] board, int row ,int col ,int val){
//同行同列是否重复
for(int i = 0 ;i<9; i++){
if(board[row][i] ==val){
return false;
}
}
for(int i = 0 ;i<9; i++){
if(board[i][col] ==val){
return false;
}
}
//九宫格是否重复
int startRow = (row / 3) * 3;
int startCol = (col / 3) * 3;
for (int i = startRow; i < startRow + 3; i++){
for (int j = startCol; j < startCol + 3; j++){
if (board[i][j] == val){
return false;
}
}
}
return true;
}
}
class Solution {
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int count = 0;
int start = s.length -1;
for(int i = g.length -1 ; i >= 0; i--){
if(start >= 0 && g[i] <= s[start]){
start--;
count++;
}
}
return count;
}
}
class Solution {
public int wiggleMaxLength(int[] nums) {
if(nums.length <= 1){
return nums.length;
}
int cur = 0;
int pre = 0;
int count = 1;
for(int i = 1; i< nums.length; i++){
cur = nums[i] - nums[i-1];
//等于0的情况表示初始时的pre
if((cur> 0 && pre <= 0) || (cur < 0 && pre >= 0)){
count++;
pre=cur;
}
}
return count;
}
}
class Solution {
public int maxSubArray(int[] nums) {
if(nums.length == 1){
return nums[0];
}
int sum = Integer.MIN_VALUE;
int count = 0;
for(int i = 0 ; i < nums.length; i++){
count += nums[i];
sum = Math.max(sum, count);
if(count <= 0){
count = 0;
}
}
return sum;
}
}