前言:
hhaa,在笔试之前还是有很多小插曲——像qq邮箱竟然把京东笔试邮件屏蔽了,没想到,以后要注意翻翻邮箱了 ~
正题:
笔试分30道选择题和2道编程题~
选择题的话,还好自己下午刷了一下去年的京东选择题,有些考点今年又考了(小确幸鸭~)
但还是有很多不确定的选项,害!
编程题
1、求由数字 2,3,5 组成的第 n 小的数。(n<=1000)
如,从小到大有,2,3,5,22,23,25,......。第 4 小的数是 22
解题:很明显,直接BFS,而且还不用考虑很多条件,队列里存的String,一是方便操作,二是怕太大int不够存。然后直接就AC,抬走下一个
public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Queue<String> queue = new LinkedList<>(); queue.add("2"); queue.add("3"); queue.add("5"); String temp = ""; while(n > 0){ temp = queue.poll(); n--; String a = temp+"2"; String b = temp+"3"; String c = temp+"5"; queue.add(a); queue.add(b); queue.add(c); } System.out.println(temp); }
2、有这么个东西,如图,有 n 行,每行的方格的数量是 2*n - 1,每个方格都有权值,求从最上面到最底层最大的权值!
解题:也很明显,即可以BFS,也可DFS,BFS的话可能需要自己定义一个结果存放走的下标和当前总权值,比较麻烦,笔者想了一下,还是DFS吧
DFS,按照DFS的套路,确定好函数作用——画决策数——确定好函数参数、终止条件、返回值——循环所有选择——回溯操作——AC
这里的递归方法题也是极其简单就递归函数就行了,笔者写的时候也愣了一下,这...么...简洁(dan)...
static List<List<Integer>> list; static int n; static int max = 0; public static void main(String[] args){ Scanner sc = new Scanner(System.in); n = sc.nextInt(); list = new ArrayList<>(); for(int i = 1 ; i<= n;i++){ List<Integer> temp = new ArrayList<>(); for(int j= 1 ; j <=2*i-1;j++){ temp.add(sc.nextInt()); } list.add(temp); } dfs(list.get(0).get(0),0,0); System.out.println(max); } static void dfs(int grade,int i,int heigh){ if(heigh == n-1){ max = grade>max?grade:max; return; } dfs(grade+list.get(heigh+1).get(i),i,heigh+1); dfs(grade+list.get(heigh+1).get(i+1),i+1,heigh+1); dfs(grade+list.get(heigh+1).get(i+2),i+2,heigh+1); }
总结:
1、选择题可能才是京东注重的吧,这难度有点大(也可能我的提升空间还很大很大....)
2、编程题就没什么好说的,算大厂里为数不多的好AC题
最后的最后,请JD的HR捞我吧,我会好好做人的