各位 dalao,头条第三题题目真的没问题吗?

输入:

5 5 3
hello help high
p a b h m
f h e c p
o i l l h
b g h o n
h x c m l

输出hello high
这明显输出的两个第一个 h 是重的吧?我不标记重复字母时,正确率 40%,标记重复字母,这个案例只能输出 hello,正确率变成 0% ?

是我看错题目了吗,求各位 dalao 讲解。
#笔试题目#
全部评论
AC 代码 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int cols = scanner.nextInt(); int rows = scanner.nextInt(); int k = scanner.nextInt(); String[] words = new String[k]; for (int i = 0; i < k; i++) { words[i] = scanner.next(); } String[][] dic = new String[rows][cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { dic[i][j] = scanner.next(); } } boolean[][] visited = new boolean[rows][cols]; for (String word : words) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (find(dic, i, j, word, 0, visited)) { System.out.println(word); } } } } } private static boolean find(String[][] dic, int i, int j, String word, int k, boolean[][] visited) { if (k >= word.length()) { return true; } if (i = dic.length || j = dic[0].length || visited[i][j] || !dic[i][j].equals(word.charAt(k) + "")) { return false; } visited[i][j] = true; boolean f = find(dic, i - 1, j, word, k + 1, visited) || find(dic, i + 1, j, word, k + 1, visited) || find(dic, i, j - 1, word, k + 1, visited) || find(dic, i, j + 1, word, k + 1, visited); visited[i][j] = false; return f; } }
点赞 回复 分享
发布于 2018-09-20 21:17
是说的每个单词里,表里一个字母只能用一次。多个单词可以分开看的
点赞 回复 分享
发布于 2018-09-20 21:20
有一个坑的地方在列数是m,行数是n。。。很容易看错写成行数是m,列数是n。
点赞 回复 分享
发布于 2018-09-20 21:20
恍然大悟,老子标记它干嘛
点赞 回复 分享
发布于 2018-09-20 21:18
需要标记吧,标记了,四个方向,ac了
点赞 回复 分享
发布于 2018-09-20 21:17
用回溯法写的,也过了0.4,说数组越界,真的不懂
点赞 回复 分享
发布于 2018-09-20 21:15
靠 早知道我也不标记了!我说我测试用例都对,怎么才0%
点赞 回复 分享
发布于 2018-09-20 21:14
不用标记
点赞 回复 分享
发布于 2018-09-20 21:14

相关推荐

ming_ri:“很抱歉,您的简历和我们当前的职位需求不是很匹配”
点赞 评论 收藏
分享
03-11 21:46
西北大学 Java
河和静子:这只是实习工资,我学长北大通班博一的,他同学被这家天天发邮件让他去实习,一个月10w
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务