给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
def test11(x):
ss = str(x)
if '-' in ss:
return False
left = 0
rigjt = len(ss) - 1
while left < rigjt:
if ss[left] == ss[rigjt]:
left += 1
rigjt -= 1
else:
return False
return True
x = 12321
print(test11(x))
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
思路:
通过排序,一行代码解决问题
既然数组中一定有一个数占比超过总数的一半,那么当数组中的数排序后,正中间的数一定有它。
def test12(nums):
nums.sort()
return nums[len(nums) // 2]
nums = [1, 2, 3, 2, 2, 2, 5, 4, 2]
print(test12(nums))
示例 1:
输入:nums = [3,6,1,0]
输出:1
解释:6 是最大的整数,对于数组中的其他整数,6 至少是数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。
示例 2:
输入:nums = [1,2,3,4]
输出:-1
解释:4 没有超过 3 的两倍大,所以返回 -1 。
示例 3:
输入:nums = [1]
输出:0
解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍。
def test13(nums):
if len(nums) == 1:
return 0
res = []
for i in range(len(nums)):
res.append([nums[i], i])
res1 = sorted(res, key=lambda x: x[0], reverse=True)
print(res1)
if res1[0][0] >= res1[1][0] * 2:
return res1[0][1]
return -1
nums = [1, 2]
print(test13(nums))
给定一有序整型数组,其中存在有重复元素,求目标元素的区间(或者求目标元素的左右边界)
例如ary = [1,2,4,4,4,6,7];target = 4;
则左边界为2,右边界为4。
def test14(nums, target):
return [nums.index(target), nums.index(target) + nums.count(target) - 1]
nums = [1, 2, 4, 4, 4, 6, 7]
target = 4
print(test14(nums, target))
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
def reverseStr(num):
if num >= -9 and num <= 9:
return num
strs = str(num)
if len(strs) == 0:
return strs
if strs[0] == '-' or strs[0] == '+':
strs1 = strs[1:][::-1]
strs3 = strs[0] + strs1
else:
strs3 = strs[::-1]
num = int(strs3)
return num
x = -120
res = reverseStr(x)
print(res)