當前位置: 妍妍網 > 碼農

面試官竟然是前女友,全程被拷問!

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"]


    # 總結

    電話號碼的字母組合問題是一個典型的使用回溯演算法解決的問題。透過這個問題的解法,我們可以更好地理解遞迴和回溯演算法的工作原理及其套用方式。

    熱門推薦