Почему следующий массив возвращает false?

Я пытаюсь решить данную проблему:

«Судоку - это головоломка с размещением чисел. Цель состоит в том, чтобы заполнить сетку 9 × 9 числами таким образом, чтобы каждый столбец, каждая строка и каждая из девяти подрешеток 3 × 3, составляющих сетку, содержали все из числа от 1 до 9 один раз.

Реализуйте алгоритм, который будет проверять, представляет ли данная сетка чисел действительную головоломку судоку в соответствии с правилами компоновки, описанными выше. Обратите внимание, что головоломка, представленная сеткой, не должна быть решаемой. «Пример сетки:

grid = [['.', '.', '.', Ƈ', Ɗ', '.', '.', ƈ', '.'],
        ['.', '.', ƌ', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', Ƈ', '.', '.', '.', '.', '.', '.'],
        ['.', ƌ', ƍ', '.', '.', '.', '.', '.', Ə'],
        ['.', '.', '.', '.', '.', '.', Ǝ', Ƈ', '.'],
        ['.', Ɖ', '.', '.', '.', '.', '.', '.', ƌ'],
        ['.', '.', '.', '.', '.', ƍ', '.', '.', '.'],
        ['.', '.', '.', Ƌ', '.', '.', '.', ƍ', '.']]

и ожидаемый результат верен.

Я написал следующий код для решения этой проблемы:

boolean sudoku2(char[][] grid) {
for(int i =0; i < 9 ; i++){
    char [] zeroTab = new char[]{Ɔ',Ɔ',Ɔ',Ɔ',Ɔ',Ɔ',Ɔ',Ɔ',Ɔ'} ;
    char [] zeroTab1 = new char[]{Ɔ',Ɔ',Ɔ',Ɔ',Ɔ',Ɔ',Ɔ',Ɔ',Ɔ'} ;
    for(int g = 0; g < 9; g++){
        if(grid[i][g] != '.'){
            Integer k = Integer.parseInt(String.valueOf(grid[i][g]));
            if(zeroTab[k-1] == Ɔ'){
                zeroTab[k-1] = grid[i][g];
            }
            else return false;
        }
        if(grid[g][i] != '.'){
            Integer c = Integer.parseInt(String.valueOf(grid[g][i]));
            if(zeroTab1[c-1] == Ɔ'){
                zeroTab1[c-1] = grid[g][i];
            }
            else return false;
        }
    }
}
    return true;

}

И это проходит 17/20 испытаний. Для сетки ниже мой код возвращает true, и я не знаю, почему ожидаемый результат здесь ложен. Может кто-нибудь объяснить мне, почему это так?

[[".",".",".",".",".",".","5",".","."], 
 [".",".",".",".",".",".",".",".","."], 
 [".",".",".",".",".",".",".",".","."], 
 ["9","3",".",".","2",".","4",".","."], 
 [".",".","7",".",".",".","3",".","."], 
 [".",".",".",".",".",".",".",".","."], 
 [".",".",".","3","4",".",".",".","."], 
 [".",".",".",".",".","3",".",".","."], 
 [".",".",".",".",".","5","2",".","."]]

Всего 1 ответ


Число 3 появляется дважды в нижней средней квадратной сетке.

(и мне кажется, что вы вообще не написали код для проверки квадратных подсетей)


Есть идеи?

10000