2020年8月31日-58同城2021校园招聘后台开发笔试 选择题22题,一道多选题,3道把编程题,时间挺紧张的。。。
编程题1:找出共有字符串 就是给几个存放字符串的列表,找出他们的公共的字符串。也就是都出现过的,这题a了80 %
没有去重复…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 package wubatongcheng;import cn.hongliang.singleton.Father;import com.sun.org.apache.regexp.internal.RE;import java.util.*;public class FindCommonString { public static ArrayList<String> findCommonString (List<List<String>> values) { ArrayList<String> res = new ArrayList<>(); for (int j = 0 ; j < values.get(0 ).size(); j++) { String s = values.get(0 ).get(j); boolean flag = true ; for (int i = 1 ; i < values.size(); i++) { flag |= values.get(i).contains(s); } if (flag) { if (!res.contains(s)) { res.add(s); } } } return res; } public static void main (String[] args) { List<String> list = Arrays.asList("a" , "a" , "hnf" , "uhg" , "hnf" ); List<String> list2 = Arrays.asList("a" , "a" , "ass" , "ggg" , "hnf" ); List<List<String>> values = Arrays.asList(list, list2); ArrayList<String> commonString = findCommonString(values); System.out.println(commonString); } }
编程题2:500以内的整数k 一个500以内的整数k, 加上a之后变成一个完全平方数,再加上b后也变成一个完全平方数,求这个k。
暴力枚举即可,找到k+a 和 k+a+b他们是否能完全开平方。但是我只过了20% 。。。为啥
原来来理解错了题意…
应该比较 a+k 和 k+b….
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 public int question (int a, int b) { for (int k = 0 ; k <= 500 ; k++){ boolean f = false ; for (int i = 0 ; i <= k+a; i++){ if (i * i == k+a){ f = true ; break ; } } boolean g = false ; for (int i = 0 ; i <= k+a+b; i++){ if (i * i == k+b){ g = true ; break ; } } if ( f && g){ return k; } } return 0 ; }
编程题3: 敌军破译密码 leetcode: https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/
dp[i] 表示以字符i结尾的字符串的翻译种数。
如果第i位和第i-1位数字可以翻译,则dp[i] = dp[i-1]+dp[i-2];
否则dp[i] = dp[i-1];
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Solution { public int translateNum (int num) { String s = String.valueOf(num); int n = s.length(); int [] dp = new int [n+1 ]; dp[0 ] = 1 ; dp[1 ] = 1 ; for (int i = 2 ; i <= n;i++){ if (Integer.valueOf(s.substring(i-2 ,i)) >= 10 && Integer.valueOf(s.substring(i-2 ,i)) <= 25 ){ dp[i] = dp[i-1 ]+ dp[i-2 ]; }else { dp[i] = dp[i-1 ]; } } return dp[n]; } }