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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值