检查数独是否有效(Java语言)

简介: 检查数独是否有效(Java语言)

题目描述:

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。

数字 1-9 在每一列只能出现一次。

数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

解题思路:

判断每个元素是否在1-9区间,再去判断重复

判断列重复,传入i j位置,除去a【i】【j】,其余行是否等于a【i】【j】

行重复同理

宫格重复可用 ( i / 3 )* 3 - ( i / 3 ) * 3+ 3

代码:

/**
 *作者:魏宝航
 *2020年11月28日,上午8:19
 */
import java.util.Scanner;
public class Test {
  public static void main(String[] args) {
    int[][] a = read();
    boolean flag = judge(a);
    if (flag)
      System.out.println("合理");
    else
      System.out.println("不合理");
  }
  public static boolean judge(int[][] a) {
    for (int i = 0; i < 9; i++)
      for (int j = 0; j < 9; j++)
        if (a[i][j] < 1 || a[i][j] > 9 || judge(i, j, a))
          return false;
    return true;
  }
  public static boolean judge(int i, int j, int[][] a) {
    //检验行元素是否重复
    for (int column = 0; column < 9; column++)
      if (column != j && a[i][column] == a[i][j])
        return true;
    //检验列元素是否重复
    for (int row = 0; row < 9; row++)
      if (row != i && a[row][j] == a[i][j])
        return true;
    //检验每个方格元素是否重复
    for (int row = (i / 3) * 3; row < (i / 3) * 3 + 3; row++)
      for (int column = (j / 3) * 3; column < (j / 3) * 3 + 3; column++)
        if (row != i && column != j && a[row][column] == a[i][j])
          return true;
    return false;
  }
  public static int[][] read() {
    Scanner sc = new Scanner(System.in);
    int[][] a = new int[9][9];
    for (int i = 0; i < 9; i++)
      for (int j = 0; j < 9; j++)
        a[i][j] = sc.nextInt();
    return a;
  }
}


目录
相关文章
|
2月前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
3月前
|
Oracle 安全 Java
Java语言简介及发展
Java语言简介及发展
|
2月前
|
存储 搜索推荐 Java
|
3月前
|
算法 Java
Java语言实现最短路径算法(Shortest Path)
Java语言实现最短路径算法(Shortest Path)
45 3
|
2月前
|
Rust JavaScript Java
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
简单对比Java、Python、Go、Rust等常见语言计算斐波拉契数的性能
|
3月前
|
算法 Java 编译器
透视Java语言的究极优化:探索性能的深度
在Java程序员的日常工作中,优化代码性能是一项至关重要的任务。然而,除了传统的性能调优方法外,本文将探讨一些更为深奥的技术,如JIT编译器的内部工作机制、GC算法的进阶应用以及多线程并发模型的优化策略。通过深入了解这些技术背后的原理和实现,我们可以更好地理解如何在Java平台上实现最高效的代码运行。 【7月更文挑战第11天】
66 4
|
4月前
|
算法 Java
垃圾回收机制(Garbage Collection,GC)是Java语言的一个重要特性,它自动管理程序运行过程中不再使用的内存空间。
【6月更文挑战第24天】Java的GC自动回收不再使用的内存,关注堆中的对象。通过标记-清除、复制、压缩和分代等算法识别无用对象。GC分为Minor、Major和Full类型,针对年轻代、老年代或整个堆进行回收。性能优化涉及算法选择和参数调整。
54 3
|
4月前
|
Java 数据安全/隐私保护 开发者
Java是一种完全支持面向对象编程的语言,其面向对象特性包括封装、继承、多态和抽象等
【6月更文挑战第18天】**面向对象编程(OOP)通过对象封装状态和行为,实现问题域的抽象。Java全面支持OOP,核心特性包括**: - **封装**:保护数据安全,隐藏内部细节。 - **继承**:子类继承父类属性和行为,促进代码重用。 - **多态**:一个接口多种实现,增强灵活性和扩展性。 - **抽象**:通过接口和抽象类抽离共性,简化复杂性。 **Java的OOP便于理解和解决复杂系统问题。**
48 3
|
3月前
|
Java 大数据 API
Java语言的核心知识点与特性
Java 是一种广泛使用的编程语言,自 1995 年发布以来,它已经成为了企业级应用开发、移动应用开发、大数据处理和云计算等领域的主流技术。
40 0
|
3月前
|
设计模式 算法 Oracle
Java语言学习路径及学习资源推荐
Java语言学习路径及学习资源推荐
下一篇
无影云桌面