(303)给定一个整数数组 nums,求出数组从索引 i到 j(i ≤ j) 范围内元素的总和,包含 i, j两点。
示例:
给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
答:
class NumArray(object):
def __init__(self, nums):
"""
:type nums: List[int]
"""
self.nums=nums
def sumRange(self, i, j):
"""
:type i: int
:type j: int
:rtype: int
"""
sums=sum(self.nums[i:j+1])
return sums
# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(i,j)
(326)给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
答:
class Solution:
def isPowerOfThree(self, n):
"""
:type n: int
:rtype: bool
"""
while n>=3:
n=n/3
return n==1.0
(342)给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
答:
class Solution:
def isPowerOfFour(self, num):
"""
:type num: int
:rtype: bool
"""
while num>=4:
num/=4
return num==1.0
(344)编写一个函数,其作用是将输入的字符串反转过来。
示例 1:
输入: "hello"
输出: "olleh"
示例 2:
输入: "A man, a plan, a canal: Panama"
输出: "amanaP :lanac a ,nalp a ,nam A"
答:
class Solution:
def reverseString(self, s):
"""
:type s: str
:rtype: str
"""
return s[::-1]
(345)编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello"
输出: "holle"
示例 2:
输入: "leetcode"
输出: "leotcede"
答:
class Solution:
def reverseVowels(self, a):
"""
:type s: str
:rtype: str
"""
b=[]
c=''
for i in a:
if i in "aeiouAEIOU":
b.append(i)
for i in a:
if i in "aeiouAEIOU":
c+=b.pop()
else:
c+=i
return c
(349)给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
答:
class Solution:
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
a=[]
nums1=set(nums1)
nums2=set(nums2)
if len(nums1)>=len(nums2):
for i in nums2:
if i in nums1:
a.append(i)
if len(nums2)>len(nums1):
for i in nums1:
if i in nums2:
a.append(i)
return a
(350)给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
答:
class Solution:
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
res = []
for k in nums1:
if k in nums2:
res.append(k)
nums2.remove(k)
return res
(367)给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
注意:不要使用任何内置的库函数,如 sqrt。
示例 1:
输入: 16
输出: True
示例 2:
输入: 14
输出: False
答:
class Solution:
def isPerfectSquare(self, n):
"""
:type num: int
:rtype: bool
"""
if n**0.5-int(n**0.5)==0:
return True
else:
return False
(371)不使用运算符 + 和-,计算两整数a 、b之和。
示例:
若 a = 1 ,b = 2,返回 3。
答:
class Solution:
def getSum(self, a, b):
"""
:type a: int
:type b: int
:rtype: int
"""
return sum([a,b])
(374)我们正在玩一个猜数字游戏。 游戏规则如下:
我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。
每次你猜错了,我会告诉你这个数字是大了还是小了。
你调用一个预先定义好的接口 guess(int num),它会返回 3 个可能的结果(-1,1 或 0):
-1 : 我的数字比较小
1 : 我的数字比较大
0 : 恭喜!你猜对了!
示例:
n = 10, 我选择 6.
返回 6.
答:
# The guess API is already defined for you.
# @param num, your guess
# @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
# def guess(num):
class Solution(object):
def guessNumber(self, n):
"""
:type n: int
:rtype: int
"""
left=0
right=n
while left<=right:
middle=(left+right)//2
num=guess(middle)
if num==-1:
right=middle-1
if num==0:
return middle
if num==1:
left=middle+1
(383)给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。
(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。)
注意:
你可以假设两个字符串均只含有小写字母。
canConstruct("a", "b") -> false
canConstruct("aa", "ab") -> false
canConstruct("aa", "aab") -> true
答:
class Solution(object):
def canConstruct(self, ransomNote, magazine):
"""
:type ransomNote: str
:type magazine: str
:rtype: bool
"""
for i in ransomNote:
if i in magazine:
magazine = magazine.replace(i,'',1)
else:
return False
return True
(387)给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
答:(超时)
class Solution:
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
for i in s:
if s.count(i)==1:
return s.index(i)
return -1
答:
class Solution:
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
dic=collections.Counter(s)
for i in range(len(s)):
if dic[s[i]]==1:
return i
return -1
(389)给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例:
输入:
s = "abcd"
t = "abcde"
输出:
e
解释:
'e' 是那个被添加的字母。
答:
class Solution:
def findTheDifference(self, s, t):
"""
:type s: str
:type t: str
:rtype: str
"""
dic=collections.Counter(s)
di=collections.Counter(t)
for i in di:
if dic[i]!=di[i]:
return i