京东笔试9.17 Java
第一题 提取年份 9%
有AC的同学麻烦让我瞅一眼。
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * DESCRIPTION: 提取字符串中的年份 年份范围在 [1000, 3999] 之间 * 输入一行英语, 比如 20% of people hold 80% of the offer in 2020 and 2019 and 2018 and 2017. * 刚开始利用正则表达式提取出了年份吧,然后只通过 9%,这个时候就开始找自己的错误了,毕竟题目说是单词中的年份啊。 * 然后就开始想英语中哪些介词后面直接跟年份呢? in、by、at、on 这些都想了一下也下手了。 * 然后系统提示增加用例,大概是 3743432sdajda2020,然后输出的结果是 2020。 * 这我就不能理解了,2020这怎么就直接判断出年份了呢?看来没用介词,然后我就去测啊,我的也输出了 2020。 * <p> * 唉,算了 9% 就 9% 吧,没时间去看了,9月25要考的优化方法都要挂了。 **/ public class Main1 { public static void main(String[] args) { Scanner in = new Scanner(System.in); String string = in.nextLine(); List<Integer> years = findYear(string); for (int i = 0; i < years.size() - 1; i++) { System.out.print(years.get(i) + " "); } System.out.println(years.get(years.size() - 1)); } private static List<Integer> findYear(String string) { List<Integer> res = new ArrayList<>(); Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher(string); while (m.find()) { int num = Integer.parseInt(m.group()); if (num >= 1000 && num <= 3999) { res.add(num); } } return res; } }
第二题 王子找公主 AC
import java.util.Scanner; /** * DESCRIPTION: 王子找公主 * 王子为 S,E 为公主,# 表示障碍,. 表示可走动 * <p> * 花了差不多二十分钟的时间来调输入. * <p> * ***! **/ public class Main2 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int T = in.nextInt(); while (T-- > 0) { int rows = in.nextInt(); int cols = in.nextInt(); char[][] grid = new char[rows][cols]; for (int row = 0; row < rows; row++) { String s = in.next(); for (int j = 0; j < s.length(); j++) { grid[row][j] = s.charAt(j); } } System.out.println(princeAndPrincess(grid) ? "YES" : "NO"); } } private static boolean princeAndPrincess(char[][] grid) { if (grid == null || grid.length == 0 || grid[0].length == 0) return false; boolean res = false; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[0].length; j++) { if (grid[i][j] == 'S') { // 如果找到王子了 res = dfs(i, j, grid); } } } return res; } private static boolean dfs(int x, int y, char[][] grid) { if (!inArea(grid, x, y) || grid[x][y] == '#') return false; // 如果越界或者走不通 if (grid[x][y] == 'E') return true; // 找到公主 grid[x][y] = '#'; // 已走过的标记为障碍 boolean res; res = dfs(x + 1, y, grid) || dfs(x - 1, y, grid) || dfs(x, y + 1, grid) || dfs(x, y - 1, grid); grid[x][y] = '.'; // 重新标记成可以走动的路 return res; } private static boolean inArea(char[][] grid, int i, int j) { return 0 <= i && i < grid.length && 0 <= j && j < grid[0].length; } }#笔试题目##京东#