Leetcode刷题总结(2019.1.18)
303.Range Sum Query - Immutable
题目说明
给定整数数组nums,找到索引i和j(i≤j)之间的元素之和。
例子:
给定nums = [-2, 0, 3, -5, 2, -1]
返回值
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
解法1:直接解法
每次调用sumRange时,我们使用for循环对索引i到j中的每个单独元素求和。
Python 代码:
class NumArray(object):
def __init__(self, nums):
self.data = nums
def sumRange(self, i, j):
count = 0
for x in range(i,j+1):
count += self.data[x]
return count
时间复杂度O(n),空间复杂度O(1)
解法2:缓存法
我们可以将序列num的值从0加到k的和数存进一个列表sum中,其中sum[k]:
因此,我们由sumRange(i,j)=sum[j+1]−sum[i]可以解决该问题
Python代码:
class NumArray(object):
def __init__(self, nums):
self.data = nums
self.sums = (len(nums)+1) * [0]
for i in range(len(nums)):
self.sums[i+1] = nums[i]+self.sums[i]
def sumRange(self, i, j):
return self.sums[j+1]-self.sums[i]
时间复杂度O(1),空间复杂度O(n)
326. Power of Three
题目说明
给定一个正整数n,若其是三的整数次幂,返回True,否则返回False
解法一:直接法
对n除3,若除不尽,则返回False,若除得尽则n=n/3,如此循环,直到判断n是否等于3,若为3返回True,否则为False。
Python代码:
def isPowerOfThree(self, n):
if n<3: return False if n!=1 else True
while n>3 :
if n==3 :return True
elif n%3 !=0: return False
elif n%3 ==0: n=n/3
else : return True if n==3 else False
时间复杂度:O(log3 (n))
解法二:基于进制转换
对于10进制来说,10的任意此方的值都以1开始,并跟随着数个0,例如102=100,103=1000……,这个定理对于其他进制一样成立,因此我们需要做的就是将数字转换为3进制并检查它是否写为由1引导后跟全0。
344. Reverse String
题目说明
编写一个以字符串作为输入并返回该字符串的反向的函数。
例如:
Input: “hello”
Output: “olleh”
解法:Python字符串切片
Python代码:
class Solution(object):
def reverseString(self, s):
return s[::-1]