快手2020秋招笔试真题
快手2020秋招笔试真题
1、字母组合
【题目描述】给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合,按照字典序升序排序,如果有重复的结果需要去重给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。
输入描述
输入2-9数字组合, 字符串长度 1<=length<=20
输出描述
输出所有组合
示例1
输入
23
输出
[ad, ae, af, bd, be, bf, cd, ce, cf]
示例2
输入
92
输出
[wa, wb, wc, xa, xb, xc, ya, yb, yc, za, zb, zc]
示例3
输入
458
输出
[gjt, gju, gjv, gkt, gku, gkv, glt, glu, glv, hjt, hju, hjv, hkt, hku, hkv, hlt, hlu, hlv, ijt, iju, ijv, ikt, iku, ikv, ilt, ilu, ilv]
【解题思路】
直接深搜递归暴力枚举所有情况。
【参考代码】
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); TreeSet<String> s = new TreeSet<>(letterCombinations(str)); System.out.println(s); } // 定义每个数字对应的字符 static String[] a = new String[] { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" }; static StringBuffer sb = new StringBuffer(); public static List<String> letterCombinations(String digits) { if (digits.length() == 0) { return null; } List<String> answer = new ArrayList<String>(); // 开始回溯 zuhe(digits, 0, answer); return answer; } private static void zuhe(String digits, int n, List<String> answer) { if (n == digits.length()) { answer.add(sb.toString()); return; } for (int i = 0; i < a[digits.charAt(n) - '0'].length(); i++) { sb.append(a[digits.charAt(n) - '0'].charAt(i)); zuhe(digits, n + 1, answer); sb.deleteCharAt(sb.length() - 1); } } }
2、字符统计
【题目描述】统计字符串(字符串最大长度<=100000)中字符出现的次数,并按出现次数降序输出。
输入描述
Ababca
输出描述
a:3,b:2,c:1
示例1
输入
Ababca
输出
a:3,b:2,c:1
【解题思路】
直接使用计数排序统计。
【参考代码】
# coding=utf-8 s = input() d = {i: 0 for i in set(s)} for n in s: d[n] += 1 r = [{'k': k, 'v': v} for k, v in d.items()] r = sorted(r, key=lambda x: x['v'], reverse=True) print(','.join([str(x["k"])+":"+str(x["v"]) for x in r]))
3、石头碰撞
【题目描述】给定一组石头,每个石头有一个正数的重量。每一轮开始的时候,选择两个石头一起碰撞,假定两个石头的重量为x,y,x<=y,碰撞结果为:
1. 如果x==y,碰撞结果为两个石头消失。
2. 如果x != y,碰撞结果两个石头消失,生成一个新的石头,新石头重量为y-x。
最终最多剩下一个石头为结束。求解最小的剩余石头质量的可能性是多少。
输入描述
第一行输入石头个数(<=100)
第二行输入石头质量,以空格分割,石头质量总和<=10000
输出描述
最终的石头质量
示例1
输入
6 2 7 4 1 8 1
输出
1
【解题思路】
利用
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> 本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题。 内容中包含多个名企的笔试真题,附有题目思路及参考代码 本专刊购买后即可解锁所有章节,故不可以退换哦~ <