问题描述:
代码:
class Solution {
public boolean isValidSudoku(char[][] board) {
char [][]result=new char[board.length][board[0].length];
Set<Character> hx = new HashSet<Character>();
//char []resultY = new char[board[0].length];
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
{
if(board[i][j]!='.'&&hx.contains(board[i][j])){
return false;
}
hx.add(board[i][j]);
}
}
hx.clear();
}
for(int ii=0;ii<board.length;ii++){
for(int jj=0;jj<board[0].length;jj++){
{
if(board[jj][ii]!='.'&&hx.contains(board[jj][ii])){
return false;
}
hx.add(board[jj][ii]);
}
}
hx.clear();
}
for(int io=0;io<board.length;io++){
for(int jo=0;jo<board[0].length;jo++){
int k=(io/3)*3;
int w=(jo/3)*3;
for(int col=k;col<k+3;col++){
for(int row=w;row<w+3;row++){
if(board[col][row]!='.'&&hx.contains(board[col][row])){
return false;
}
hx.add(board[col][row]);
}
}
hx.clear();
}
}
return true;
}
}
思路:
1.利用HashSet判断是否存在
2.将整个数独表看成一个3*3的 表格 那么每个小格所在的由9个小格组成的大格的 起始坐标就是
[(i/3)*3,(j/3)*3]
3.强行计算
代码:
class Solution {
public void setZeroes(int[][] matrix) {
int [][]matrix2 = new int [matrix.length][matrix[0].length];
for(int w=0;w<matrix.length;w++){
for(int e=0;e<matrix[0].length;e++){
matrix2[w][e]=matrix[w][e];
}
}
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[0].length;j++){
if(matrix[i][j]==0&&matrix2[i][j]==0){
for(int p=0;p<matrix.length;p++)
matrix[p][j]=0;
for(int q=0;q<matrix[0].length;q++)
matrix[i][q]=0;
}
}
}
}
}
思路:
先复制一个和原数组完全一样的新数组,然后通过判断元素在新旧数组中同时为0的时候,将元素所在的行和列置为0;