Сделал, через два ArrayList. Метод boolean compressRow(int[] row) проверял, он делает то, что нужно с любыми вариантами цифр. Почему валидатор не принимает 2-й пункт?
private boolean compressRow(int[] row) {
        ArrayList<Integer> listRow = new ArrayList<>();
        for (int i = 0; i < row.length; i++) {
            listRow.add(row[i]);
        }

        ArrayList<Integer> copy = new ArrayList<>(listRow);
        Iterator<Integer> itr = copy.iterator();
        while (itr.hasNext()) {
            if (itr.next() == 0) {
                itr.remove();
            }
        }

        if (copy.size() != listRow.size()) {
            int difference = listRow.size() - copy.size();
            for (int i = 0; i < difference; i++) {
                copy.add(0);
            }
        }
        return !listRow.equals(copy);
    }