LeetCode做题记录_1

代码能力太差了,在leetCode上做点简单的题。记录一下😀


代码能力完全是入门级别。。只会写点异常简单的东西,准备做点题提升下能力。

在做题过程中,我会尽可能使用我接触过的python,java,c++来解题。

当然,“尽可能”,写不写的出来就是另外一回事了

1.两数之和

描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

思路就是遍历给定数组中的每个元素,让他们都加一遍,两数之和进if条件判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def twoSum(self, nums, target):
listlen = len(nums)
for i in range(listlen):
for j in range(listlen):
if nums[i] + nums[j] == target:
print(f"Answer: {i}, {j}!")

nums = [2, 7, 11, 15]
target = 9

solution = Solution()
solution.twoSum(nums, target)

# 输出:Answer: 0, 1!
# Answer: 1, 0!

java的不会写~直接看了官方答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public int[] twoSum(int[] nums, int target) {//定义了一个twoSum方法,返回类型为int[],该方法接受一个整数数组nums和一个整数目标值target作为参数
//java定义方法:访问修饰符 返回类型 方法名(参数列表)
int n = nums.length;
for (int i = 0; i < n; ++i) {//for (初始化语句; 循环条件; 更新语句),++i是前缀自增
for (int j = i + 1; j < n; ++j) {
if (nums[i] + nums[j] == target) {
return new int[]{i, j};//花括号创建数组
}
}
}
return new int[0];//假如找不到会返回一个空的整数数组
}
}


//https://leetcode.cn/problems/two-sum/

2.无重复字符的最长字串

做题感受:我是SB

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def length_of_longest_substring(s):
char_dict = {} # 记录每个字符最后一次出现的索引位置
start = 0 # 子串的起始位置
end = 0 # 子串的结束位置
max_length = 0 # 最长子串的长度

for i, char in enumerate(s):
if char in char_dict and char_dict[char] >= start:
start = char_dict[char] + 1
end = i
char_dict[char] = i
max_length = max(max_length, end - start + 1)

return max_length

3.计算列车到站时间

给你一个正整数 arrivalTime 表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime 表示列车延误的小时数。

返回列车实际到站的时间。

注意,该问题中的时间采用 24 小时制。

思路就是求和取模

1
2
3
4
5
6
7
8
9
10
11
12
13
# python
class Solution:
def getReal(self):
arrivalTime = int(input("请输入列车正点到站时间:"))
delayedTime = int(input("请输入列车延误的小时数:"))
realTime = (arrivalTime + delayedTime) % 24
print(f"列车本该在{arrivalTime}点到站,但延误了{delayedTime}小时,所以实际到站时间为{realTime}点!")

# 实例化Solution类
solution = Solution()
# 调用getReal方法
solution.getReal()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

//java
//Main.java

import java.util.Scanner; //利用Scanner类读取输入

public class Main { //类与文件名保持一致
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//创建了一个名为scanner的Scanner对象,并将其初始化为从标准输入流(System.in)中读取数据

System.out.print("请输入列车正点到站时间:");
int arrivalTime = scanner.nextInt();

System.out.print("请输入列车延误的小时数:");
int delayedTime = scanner.nextInt();

int realTime = (arrivalTime + delayedTime) % 24;
System.out.println("列车本该在" + arrivalTime + "点到站,但延误了" + delayedTime + "小时,所以实际到站时间为" + realTime + "点!");

scanner.close();
}
}

4.罗马数字转整数

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

1
2
3
4
5
6
7
8
字符          数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II27 写做 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
def romanToInt(self, luoma):
roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
result = 0
prev_value = 0
for char in luoma:
value = roman_map[char]
if value > prev_value:
result += value - 2 * prev_value
else:
result += value
prev_value = value
return result

s = Solution()
input_roman = input("请输入一个罗马数字:")
print(s.romanToInt(input_roman))

5.回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

  • 例如,121 是回文,而 123 不是。

思路就是先把数字转换成字符串,然后计算长度利用切片分别返回正序倒序的结果。判断是否相等然后输出。

一开始还是想利用input函数提示用户输入,然后利用Int转换为整数,再利用str转成字符串,后来觉得没任何必要。。直接number = input("请输入一个数字。我会判断是不是回文数:")就行。然后利用len函数计算字符串长度,再利用切片去看正序倒序结果,if判断然后输入就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# python

class Solution:
def check_it(self,num):
zhengxv = num[::]
daoxv = num[::-1]
if zhengxv == daoxv:
print(f"{num}是一个回文数")
else:
print(f"{num}不是一个回文数")

s = Solution()
num = input("请输入一个数字。我会判断是不是回文数:")
print(s.check_it(num))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//java
public class Solution {
public boolean check_it(int num) {
String numStr = String.valueOf(num);
String reverseNumStr = new StringBuilder(numStr).reverse().toString();
if (numStr.equals(reverseNumStr)) {
System.out.println(num + " 是一个回文数");
return true;
} else {
System.out.println(num + " 不是一个回文数");
return false;
}
}

public static void main(String[] args) {
Solution solution = new Solution();
int num = 12321;
solution.check_it(num);
}
}

LeetCode做题记录_1
http://example.com/2023/09/19/2023-9-19-LeetCode做题记录_1/
作者
notbad3
发布于
2023年9月19日
许可协议