leetcode36M有效的数独

2018-09-24  本文已影响0人  愤怒的灰机
题目

思路一:分别用三个容器来保存已有的数据,三个容器的容量都是9,分别代表第0-8行,0-8列,以及第0-8个块,在添加的时候判断数字是否已经在容器中,如果在则返回false。

总结:很简单的一道题,但是因为粗心没有在31行判断是否为空所以检查了半天。可借鉴的点:(1)把init()方法和add()方法与主方法松耦合,方便修改;(2)利用hashSet容器判断是否存在是比较高效的。

代码如下:

思路一代码

思路二:遍历三遍,第一遍判断每个行是否重复,第二遍判断每个列是否重复,第三遍判断每个块是否重复

分析:思路二的优点是占用的空间更少,但是遍历的次数更多,不过实际运行中思路二的时间会更少。

部分代码实例(判断行):

for (char[] chs : board) {

    Set<Character> set = new HashSet<Character>();

    int count = 0;

    for (char ch : chs) {

        if (ch == '.') {

            count++;

            continue;

        }

        set.add(ch);

        }

    if (set.size() != (9 - count))

    return false;

}

上一篇下一篇

猜你喜欢

热点阅读