刷题

195 阅读2分钟

easy part

1.两数之和

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

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。


class Solution(object):        def twoSum(self, nums, target):            lens=len(nums)            index_list = []            for i in range(lens):                for j in range(i+1, lens):                    if(nums[i] + nums[j]== target ):                        index_list.append(i)                        index_list.append(j)            print(list(index_list))            return index_list

list( tup ) tup -- 要转换为列表的元组。表示返回列表。
*set([元组]、字符串) --创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。 Eg: set('123123') {'3', '1', '2'}

2.整数反转

给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。 

输入:x = 123
输出:321

目的:得到’x‘的末尾数字。使用取模运算。

这里要注意负数和模取余不能是0,所以while(x!=0)即可。12345  1234 123 12 1 --》 5 54 543 5432 54321。注意:x÷10的写法:x//=10。

# 完成反转功能:
class Solution:    def reverse(self, x: int) -> int:        res=0        temp=0        while(x!=0):            temp=x%10            res=res*10+temp            x//=10        return res

**范围:**假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]

最大的32位整数:2^32=2147483647,反转后的数字若大于2^32是没法存到int里面的,因此需要返回0(表示溢出)。这里需要判断①正数范围:>214748364或=214748364且%后>7 ②负数范围:<-214748364 或 =-214748364 且%<-8。

class Solution:    def reverse(self, x: int) -> int:        res=0        temp=0        while(x!=0):            temp=x%10            #判断是否 大于 最大32位整数             if res>214748364 or (res==214748364 and tmp>7):                 return 0;            #判断是否 小于 最小32位整数             if res<-214748364 or (res==-214748364 and tmp<-8):                return 0;             res=res*10+temp            x//=10                return res

3.回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。  

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

class Solution:    def isPalindrome(self, x: int) -> bool:        # 回文数        res=0        if x<0:            return False        x1=abs(x)        while(x1!=0):            temp=x1%10            x1=int(x1/10)            res=res*10+temp        if x==res:            return True        else:            return False

4.罗马数字转整数

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如,27 写做 XXVII, 即为 XX + V + II 。

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

输入: "III"
输出: 3

class Solution:    def romanToInt(self, s: str) -> int:    # 构建字典IV 4        note = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}        ans=0                for i in range(len(s)):                        if i<len(s)-1 and note[s[i]] < note[s[i+1]]:                                ans -= note[s[i]]            else:                ans += note[s[i]]        return ans