My solution for your reference


  • 5
    W
    class Solution {
    public:
        bool isValidSudoku(vector<vector<char> > &board) {
            for (int i = 0; i < 9; ++i) {
                vector<int> count1(9, 0), count2(9, 0), count3(9, 0);
                for (int j = 0; j < 9; ++j) {
                    if (board[i][j] != '.') {
                        int num1 = board[i][j]-'1';
                        if (count1[num1] != 0)
                            return false;
                        else
                            count1[num1] = 1;
                    }
                    
                    if (board[j][i] != '.') {
                        int num2 = board[j][i]-'1';
                        if (count2[num2] != 0)
                            return false;
                        else
                            count2[num2] = 1;
                    }
                    
                    if (board[i/3*3+j/3][i%3*3+j%3] != '.') {
                        int num3 = board[i/3*3+j/3][i%3*3+j%3] - '1';
                        if (count3[num3] != 0)
                            return false;
                        else
                            count3[num3] = 1;
                    }
                }
            }
            return true;
        }
    };

  • 1
    R

    A java solution with same idea while using bitwise operation.

    public class Solution{
        public boolean isValidSudoku(char[][] board) {
        if (board.length!=9||board[0].length!=9)	
        	return false;
    
        int[] row= new int[9]; int[] col= new int[9];int[] sqr= new int[9];   
    
        for (int i=0;i<9;i++){
        	for (int j=0;j<9;j++){
        		if (board[i][j]!='.'){
        			int num = board[i][j]-'0';
        			if ((row[i]&1<<num)>0)
        				return false;
        			else row[i]|=1<<num;
    
        			if ((col[j]&1<<num)>0)
        				return false;
        			else col[j]|=1<<num;
    
        			int sqr_num=(i-i%3)+j/3;
        			if ((sqr[sqr_num]&1<<num)>0)
        				return false;
        			else sqr[sqr_num]|=1<<num;
    
        		}
        	}
        }    
        return true;	
        		
        }
    }

  • 0
    V

    I found your bit manipulation redundant. It didn't save you any memory... why not just use three ints 'row', 'col', 'sqr' and just do bitwise or with the bits in those ints?!


  • 0
    R

    I think you are right.


  • 0
    M

    I don't think you need Arrays.fill() initialization since the "new" keyword already initialized all elements to default value of 0.


  • 0
    R

    I was foolish at that time.


  • 0
    L

    I think you can improve your code a bit by using vector of bool instead of int


Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.