0%

英雄笔试4月21日

岗位

UE客户端开发工程师

题目分配

3 道编程题

作答时间

60 分钟

做题感受

  • 时间偏紧,3 题一个小时平均 20 分钟一题,而且不准用 IDE。
  • 第一题比较简单,利用快排求数组里第 K 个大的数,手撕快排即可(15min,100%)
  • 第二题之前没做过,后来发现是 leetcode 原题329. 矩阵中的最长递增路径 - 力扣(LeetCode) 用了 dfs + 记忆矩阵(30min,100%)
  • 第三题应该是递归和动态规划都可以(15min,32%)

    给你一种编码方式:’a’ -> ‘1’ , ‘b’ -> ‘2’ … ‘z’ -> ‘26’,求给定字符串总共有多少种编码方式。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    class Solution {
    public:
        /**
         * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
         *
         * 解码
         * @param nums string字符串 数字串
         * @return int整型
         */
        int solve(string nums) {
            return count(nums);
        }
        int count(string code)
        {
            if(code.size()==0)
                return 1;
            if(code.size()==1)
                return 1;            
            if(code[0]<='2'&&code[1]<='6')
                return count(code.substr(1)) + dfs(code.substr(2));
            return count(code.substr(1));
        }
    };
    当时死活不知道哪里错了,后来结束之后到 IDE 上调试了一下就发现 code[0]<='2'&&code[1]<='6' 这个条件是有问题的,应该是 code[0]=='2'&&code[1]<='6' || code[0]=='1' ,并且还有额外的细节,比如 "10"或者"20" 只有一种解码方式。以及整体还有很大的性能优化空间。