【1】、魔术索引
魔术索引。 在数组A[0…n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。
示例1:
输入:nums = [0, 2, 3, 4, 5]
输出:0
说明: 0下标的元素为0
示例2:
输入:nums = [1, 1, 1]
输出:1
说明:
nums长度在[1, 1000000]之间
此题为原书中的 Follow-up,即数组中可能包含重复元素的版本
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
📌【我的思路】
📌【我的思路代码实现】
nums = [0, 2, 3, 4, 5]
new_nums = []
for i in range(len(nums)):
if i == nums[i]:
new_nums.append(i)
if len(new_nums) == 0:
print(-1)
new_num = new_nums.sort()
print(new_nums[0])
【参考的题解】
class Solution:
def findMagicIndex(self, nums: List[int]) -> int:
for i in range(len(nums)):
if i == nums[i]:
return i
return -1
【思考】
题目中的
若有多个魔术索引,返回索引值最小的一个。
这个条件说的其实是只要遇见“魔术索引”返回即可,但是我的代码中,却用了新的列表来装“魔术索引”的索引,还将他们排序,这些都是没有必要的。
🌹!!!审题和理解题目很重要
【2】、整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
【我的思路】
分支出两个条件,一是数字末尾有‘0’时。二是数字为负数时
📍这是一个不完整的代码
class Solution:
def reverse(self, x: int) -> int:
num = str(x)
for i in num:
if num[-1] == '0':
return int(num[-2:0:-1])
else:
return int(num[::-1])
📍数字结尾是‘0’就截取到字符串倒数第二位反转即可,但是如果数字为负数,负号的处理就会很麻烦
🌹【参考的代码】
class Solution:
def reverse(self, x: int) -> int:
if x >= 0:
if int(str(x)[::-1]) <= 2**31 - 1:
return int(str(x)[::-1])
else:
return 0
else:
if -int(str(x)[:-len(str(x)):-1]) >= (-2)**31:
return -int(str(x)[:-len(str(x)):-1])
else:
return 0