当前位置: 欣欣网 > 码农

面试官竟然是前女友,全程被拷问!

2024-03-07码农

xdm,太狗血了,面试居然碰到了前女友,而且还是最后一面的面试官,真的人都麻了,这放在整个面试界也是相当的炸裂......


这场面试,注定不同寻常。


让人好笑的是,面试结束时,前女友面无表情地说:「面试结果我们会邮件通知你。有什么问题,我们会邮件或电话联系。」然后顿了顿,补充了一句:「不过,你的手机号,我已经拉黑了。」


论坛上的瓜友们对这个故事反应热烈,评论区炸了锅。

有人调侃说,「想代入女主狠狠拷打楼主」。

也有人开玩笑,「这放在整个面试界都是相当炸裂的」。

更有意思的是,有瓜友开始脑补后续剧情,「入职】后悔】复合,剧情我已经想好了」。


最后,居然还有人在线催更!叫楼主别断更了。


楼主也是回复,会更新后续,简直是像在网上追剧一样样的,哈哈。大家想吃后续的瓜也可以去踩一下楼主的贴子。

下面是今日算法题

今日算法题,来自LeetCode的第17题:电话号码的字母组合,下面是我的算法思路及实现,让我们来看看吧。

# 算法题目

给定一个仅包含数字 2-9 的字符串,返回所有它能代表的字母组合。数字到字母的映射方式如下(就像电话按键一样):2 - abc、3 - def、4 - ghi、5 - jkl、6 - mno、7 - pqrs、8 - tuv、9 - wxyz。注意,1 不对应任何字母。

# 算法思路

  1. 初始化映射:

    首先创建一个数组或哈希表来存储每个数字到其对应字母的映射。

  2. 递归函数定义:

    定义一个递归函数,它接受当前的字符串(初始为空)、数字字符串和当前数字字符串的索引。

    函数的目的是在当前字符串后添加所有可能的字母,并在达到数字字符串末尾时将完成的字符串添加到结果中。

  3. 回溯遍历:

  • 对于数字字符串中的每个数字,获取其对应的所有可能字母。

  • 对于这些字母中的每一个,添加到当前字符串,并递归调用函数,索引加一。

  • 递归完成后,返回上一层(回溯),尝试其他可能的字母。

  • 收集结果:

    当遍历完所有数字字符串时,将当前累积的字符串添加到结果列表中。


  • # 代码实现

    C语言实现

    首先,我们需要定义一个映射表来将数字映射到相应的字母,然后使用回溯法生成所有可能的组合。我们还需要定义一个辅助函数来增加新的组合到结果集中。

    #include<stdio.h>#include<stdlib.h>#include<string.h>char* letterMap[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};voidbacktrack(char **result, int *returnSize, char *current, int currentSize, char *digits, int index, int length){if (index == length) { current[currentSize] = '\0'; // End current string result[*returnSize] = (char*)malloc(sizeof(char) * (currentSize + 1));strcpy(result[*returnSize], current); (*returnSize)++;return; }char *letters = letterMap[digits[index] - '0'];for (int i = 0; letters[i] != '\0'; i++) { current[currentSize] = letters[i]; backtrack(result, returnSize, current, currentSize + 1, digits, index + 1, length); }}char **letterCombinations(char *digits, int *returnSize){int length = strlen(digits);if (length == 0) { *returnSize = 0;returnNULL; }int maxCombinations = 1;for (int i = 0; i < length; i++) {if (digits[i] == '7' || digits[i] == '9') maxCombinations *= 4; // 'pqrs' or 'wxyz'else maxCombinations *= 3; }char **result = (char**)malloc(sizeof(char*) * maxCombinations);char *current = (char*)malloc(sizeof(char) * (length + 1)); // +1 for '\0' *returnSize = 0; backtrack(result, returnSize, current, 0, digits, 0, length);free(current);return result;}intmain(){char digits[] = "23";int returnSize;char **combinations = letterCombinations(digits, &returnSize);for (int i = 0; i < returnSize; i++) {printf("%s\n", combinations[i]);free(combinations[i]); // Free each string }free(combinations); // Free the array of stringsreturn0;}


    Java实现

    import java.util.ArrayList;import java.util.List;public class Solution {privateString[] letterMap = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs",// 7"tuv", // 8"wxyz"// 9 };public List<String> letterCombinations(String digits) { List<String> results = new ArrayList<>();if (digits == null || digits.length() == 0) {return results; } backtrack(results, digits, "", 0);return results; }privatevoid backtrack(List<String> results, String digits, String current, int index) {if (index == digits.length()) { results.add(current);return; }String letters = letterMap[digits.charAt(index) - '0'];for (char letter : letters.toCharArray()) { backtrack(results, digits, current + letter, index + 1); } }}

    Python实现

    defletter_combinations(digits):ifnot digits:return [] letter_map = ["", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"] results = []defbacktrack(index, current):if index == len(digits): results.append(current)return letters = letter_map[int(digits[index])]for letter in letters: backtrack(index + 1, current + letter) backtrack(0, "")return results

    # 算法解析

    这种方法利用了递归和回溯算法的优势,能够高效地解决问题。每一步选择一个数字对应的所有可能字母,然后递归地处理下一个数字,直到处理完所有输入的数字。

    # 示例和测试

    以输入字符串 "23" 为例:

    digits = "23"print(letter_combinations(digits))


    输出:

    ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]


    # 总结

    电话号码的字母组合问题是一个典型的使用回溯算法解决的问题。通过这个问题的解法,我们可以更好地理解递归和回溯算法的工作原理及其应用方式。

    热门推荐