快手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%内容,订阅专栏后可继续查看/也可单篇购买

2021名企校招笔试真题-技术 文章被收录于专栏

&lt;p&gt; 本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题。 内容中包含多个名企的笔试真题,附有题目思路及参考代码 本专刊购买后即可解锁所有章节,故不可以退换哦~ &lt;

全部评论

相关推荐

点赞 评论 收藏
分享
11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务