LeetCode 数据结构入门 Day5 数组 Java

36. 有效的数独

问题描述:

代码:

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.强行计算

73. 矩阵置零

 代码:

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值