- 💂 作者:烧洋芋的土豆
- 🤟 内容:使用Java语言刷Leetcode算法题
- 🌏 技术交流:分享日常学习知识,平常遇到的问题,一些学习资料,一起学习,一起进步。
🐷 1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
提示:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
代码和结果图如下:
class Solution {
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = i+1; j < nums.length; j++) {
if(nums[i]+nums[j]==target){
return new int[]{i,j};
}
}
}
return new int[0];
}
}
🐒 9.回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如:
121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-231 <= x <= 231 - 1
代码和结果图如下:
class Solution {
public boolean isPalindrome(int x) {
String s=String.valueOf(x);
String[] split = s.split("");
String s2="";
for (int i = split.length-1; i >= 0; i--) {
s2= s2+split[i];
}
if(s2.equals(s)){
return true;
}else {
return false;
}
}
}
🐏 13. 罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 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
示例 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 应该写作 XLIX,999 应该写作 CMXCIX 。
关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics 。
代码和结果图如下:
class Solution {
public int romanToInt(String x) {
int sum=0;
int value = getValue(x.charAt(0));
for (int i = 1; i < x.length(); i++) {
int value1 = getValue(x.charAt(i));
if(value1>value){
sum-=value;
}else {
sum+=value;
}
value=value1;
}
sum +=value;
return sum;
}
public int getValue(char ch) {
switch(ch) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}
}
🐇 14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。
提示:
- 1 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] 仅由小写英文字母组成
代码和结果图如下:
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0){
return "";
}
//获取第一位元素
String res=strs[0];
for (int i = 1; i < strs.length; i++) {
int j=0;
while (j < res.length() && j < strs[i].length() && res.charAt(j) == strs[i].charAt(j)) {
j++;
}
res = res.substring(0, j);
if(res.equals("")){
return res;
}
}
return res;
}
}
🐯 20. 有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
提示:
- 1 <= s.length <= 10^4
- s 仅由括号 ‘()[]{}’ 组成
代码和结果图如下:
class Solution {
private static final Map<Character, Character> map = new HashMap<Character, Character>() {{
put('{', '}');
put('[', ']');
put('(', ')');
put('?', '?');
}};
public static boolean isValid(String s) {
if (s.length() > 0 && !map.containsKey(s.charAt(0))) {
return false;
}
LinkedList<Character> stack = new LinkedList<Character>() {{
add('?');
}};
for (Character c : s.toCharArray()) {
if (map.containsKey(c)) {
stack.addLast(c);
} else if (!map.get(stack.removeLast()).equals(c)) {
return false;
}
}
return stack.size() == 1;
}
}
🐷 总结
这几道算法题主要是采用Java基础知识来实现的,比较简单,后续的题目会越来越难,希望大家多多鼓励,让我们一起坚持下来,一起加油 ! ! !