哪个网站注册域名好,整站模板,网站的文字被爬取了,wordpress自定义表单插件【LeetCode】挑战100天 Day15#xff08;热题面试经典150题#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-172.1 题目2.2 题解 三、面试经典 150 题-173.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站#xff0c;提供各种算法和数据结构的题目热题面试经典150题 一、LeetCode介绍二、LeetCode 热题 HOT 100-172.1 题目2.2 题解 三、面试经典 150 题-173.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站提供各种算法和数据结构的题目面向程序员、计算机科学专业学生和技术爱好者等人群旨在帮助他们提高算法和编程技能。LeetCode上的问题通常来自各种技术公司的面试题目因此它也是程序员面试准备的重要资源之一。
LeetCode上的问题涵盖了各种难度级别从入门级到专家级都有不同难度的题目可供练习。用户可以选择使用不同的编程语言提交答案LeetCode能够对结果进行评估并返回测试结果。
除了题目外LeetCode还提供了讨论区、排行榜等社区功能用户可以在这里交流学习心得、解决疑难问题并与其他用户比较自己的做题成绩。
挑战100天 AI In LeetCode是基于LeetCode题库借助AI的能力进行解题、并学习其解题过程。
二、LeetCode 热题 HOT 100-17
2.1 题目
** 电话号码的字母组合**
给定一个仅包含数字 2-9 的字符串返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下与电话按键相同。注意 1 不对应任何字母。示例 1输入digits 23
输出[ad,ae,af,bd,be,bf,cd,ce,cf]
示例 2输入digits
输出[]
示例 3输入digits 2
输出[a,b,c]提示0 digits.length 4
digits[i] 是范围 [2, 9] 的一个数字。2.2 题解
解题思路
这道题可以使用回溯算法来求解回溯算法是一种通过穷举所有可能的情况来找到所有解的算法。
首先我们可以创建一个映射表来存储每个数字对应的字母集合。然后定义一个递归函数该函数接受两个参数当前的组合字符串和剩余的数字字符串。
在递归函数中我们首先判断剩余的数字字符串是否为空如果为空则将当前的组合字符串加入结果列表中。否则取出剩余数字串的第一个字符并找到对应的字母集合。然后遍历该字母集合将每个字母与当前的组合字符串拼接得到新的组合字符串并将剩余数字串的子串和新的组合字符串作为参数递归调用自身。
最后我们需要在主函数中调用递归函数并返回结果列表。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Solution {public ListString letterCombinations(String digits) {ListString res new ArrayList();if (digits null || digits.length() 0) {return res;}MapCharacter, String map new HashMap();map.put(2, abc);map.put(3, def);map.put(4, ghi);map.put(5, jkl);map.put(6, mno);map.put(7, pqrs);map.put(8, tuv);map.put(9, wxyz);backtrack(res, , digits, map, 0);return res;}private void backtrack(ListString res, String combination, String digits, MapCharacter, String map, int index) {if (index digits.length()) {res.add(combination);return;}char digit digits.charAt(index);String letters map.get(digit);for (int i 0; i letters.length(); i) {String letter String.valueOf(letters.charAt(i));backtrack(res, combination letter, digits, map, index 1);}}
}三、面试经典 150 题-17 数组 / 字符串 3.1 题目
罗马数字转整数
罗马数字包含以下七种字符: I V X LCD 和 M。字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如 罗马数字 2 写做 II 即为两个并列的 1 。12 写做 XII 即为 X II 。 27 写做 XXVII, 即为 XX V II 。通常情况下罗马数字中小的数字在大的数字的右边。但也存在特例例如 4 不写做 IIII而是 IV。数字 1 在数字 5 的左边所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况I 可以放在 V (5) 和 X (10) 的左边来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边来表示 400 和 900。
给定一个罗马数字将其转换成整数。示例 1:输入: s III
输出: 3
示例 2:输入: s IV
输出: 4
示例 3:输入: s IX
输出: 9
示例 4:输入: s LVIII
输出: 58
解释: L 50, V 5, III 3.
示例 5:输入: s MCMXCIV
输出: 1994
解释: M 1000, CM 900, XC 90, IV 4.提示1 s.length 15
s 仅含字符 (I, V, X, L, C, D, M)
题目数据保证 s 是一个有效的罗马数字且表示整数在范围 [1, 3999] 内
题目所给测试用例皆符合罗马数字书写规则不会出现跨位等情况。
IL 和 IM 这样的例子并不符合题目要求49 应该写作 XLIX999 应该写作 CMXCIX 。
关于罗马数字的详尽书写规则可以参考 罗马数字 - Mathematics 。3.2 题解
解题思路
根据题目描述我们可以发现罗马数字转整数的规律为对于每一位上的罗马数字如果该位对应的数比下一位对应的数小则将该位对应的数减去否则将该位对应的数加上。例如对于罗马数字IV第一位V比第二位I大所以结果为5-14。
因此我们可以从左到右遍历罗马数字字符串用一个变量记录当前已经遍历过的所有数字代表的整数之和并根据当前数字与下一位数字的大小关系决定是加上还是减去当前数字代表的整数。
public class Solution {public int romanToInt(String s) {MapCharacter, Integer map new HashMap();map.put(I, 1);map.put(V, 5);map.put(X, 10);map.put(L, 50);map.put(C, 100);map.put(D, 500);map.put(M, 1000);int result 0;for (int i 0; i s.length(); i) {int currentNum map.get(s.charAt(i));if (i s.length() - 1 currentNum map.get(s.charAt(i1))) {result - currentNum;} else {result currentNum;}}return result;}
}至此挑战100天 AI In LeetCode Day015热题面试经典150题完成后续会持续调整查阅过程中若遇到问题欢迎留言或私信交流。