本文介绍: 【LeetCode】挑战100天 Day15(热题+面试经典150题)

一、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 List<String&gt; letterCombinations(String digits) {
        List<String&gt; res = new ArrayList<&gt;();
        if (digits == null || digits.length() == 0) {
            return res;
        }
        
        Map<Character, String&gt; 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(List<String> res, String combination, String digits, Map<Character, 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 题目

罗马数字整数

罗马数字包含以下七种字符: IVXLCDM。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
例如, 罗马数字 2 写做 II ,即为两个并列112 写做 XII ,即为 X + II27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊规则只适用于以下六种情况:

I 可以放在 V (5)X (10) 的左边,来表示 49X 可以放在 L (50)C (100) 的左边,来表示 4090C 可以放在 D (500)M (1000) 的左边,来表示 400900给定一个罗马数字,将其转换整数示例 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]题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
ILIM 这样的例子并不符合题目要求,49 应该写作 XLIX999 应该写作 CMXCIX 。
关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics

3.2 题解

解题思路:

根据题目描述我们可以发现罗马数字转整数的规律为:对于每一位上的罗马数字,如果该位对应的数比下一位对应的数小,则将该位对应的数减去;否则,将该位对应的数加上。例如,对于罗马数字”IV”,第一位”V”比第二位”I”大,所以结果为5-1=4。

因此,我们可以从左到右遍历罗马数字字符串,用一个变量记录当前已经遍历过的所有数字代表的整数之和,并根据当前数字与下一位数字的大小关系,决定是加上还是减去当前数字代表的整数

public class Solution {
    public int romanToInt(String s) {
        Map<Character, 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 &amp;&amp; currentNum < map.get(s.charAt(i+1))) {
                result -= currentNum;
            } else {
                result += currentNum;
            }
        }
        
        return result;
    }
}

在这里插入图片描述

至此,挑战100天 AI In LeetCode Day015(热题+面试经典150题)完成,后续会持续调整;查阅过程中若遇到问题欢迎留言或私信交流

原文地址:https://blog.csdn.net/ith321/article/details/134621171

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_17267.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注