思路一:分别用三个容器来保存已有的数据,三个容器的容量都是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;
}
网友评论