LeetCodeEasyLevel

ReverseString

先来个简单的练练手,看到这个第一反应就是reverse一下,所以就先把str转换成list,然后 使用 ‘’.joint()输出为str格式


class Solution(object):
    def reverseString(self, s):
       a=list(s)
        a.reverse()
        r = ''.join(a)
        return r
 

Runtime: 44 ms      

然后看评论,果然这个是比较正常的思维,另外一个很意外的答案是

class Solution(object):
    def reverseString(self, s):
        """
        :type s: str
        :rtype: str
        """
        return s[::-1]
一个more Pythonic的方法...

开了个不错的头,相信自己能坚持刷下去


Nim Game

乍一看还以为这个题目很难,哎呀两个人的选择都是具有范围的,需要动态的去判断...后来再仔细一看,Both of you are very clever and have optimal strategies for the game

然后又说如果只剩四个你肯定死定了...这样一想,那你要是只剩4的倍数你还不是死定了,喵的就这么叫简单。

class Solution(object):
    def canWinNim(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n%4==0:
            r = False
        else:
            r = True
        return r

但是,我相信这样肯定不Pythonic, return (n%4)!=0这样才最简洁....

借着这个题目复习了下,Python中的bool型,bool是int的子类,2==True:False ,bool(2)==True:True.,除了''、""、0、()、[]、{}、None为False之外,其他的都是True


Sum of Two Integers

要求不用+ 和减完成两个整型的加法运算。第一反应就是转换到其他运算上。

方案一

class Solution(object):
    def getSum(self, a, b):
        import math
        return math.log2((1<<a)*(1<<b))
移位之后对2求对数,指数的乘法就是指数的加法。提交后错误,因为有一组TestCase 是 -1 和+1,-1无法完成左移操作。

所以干脆把移位操作改成指数运算

方案二

class Solution(object):
    def getSum(self, a, b):
        import math
        return int(math.log(math.exp(a)*math.exp(b)))
提交后又错误...    错误输入为:2147483647 -2147483648运算溢出
暂时想不出来了,先挂着吧,有灵感了再来

MoveZeros

在不改变原有非零项排序的条件下把0移到列表的末尾,count(0)得到0的数目,然后删除一个0,append一个0

class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        k = nums.count(0)
        for i in range(k):
            nums.remove(0)
            nums.append(0)
        

但是124ms,24%,不是很理想

Intersection of Two Arrays

查找两个列表中相同相同的元素,也就是求两个列表的交集

蠢方法

class Solution(object):
    def intersection(self, nums1, nums2):
              for i, element in enumerate(nums1):
                       if element in nums2 and not in list:
                             list.append(element)

聪明方法,当然是用内建的方法咯

class Solution(object):
    def intersection(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        return list(set(nums1).intersection(set(nums2)))


Excel Sheet Column Number

这个其实就是26进制计数,23%

<span style="font-size:14px;">class Solution(object):
    def titleToNumber(self, s):
        """
        :type s: str
        :rtype: int
        """
        l = len(s)
        r=0
        for i, element in enumerate(s):
            r += (26**(l-1-i))*(ord(element)-64)
        return r</span>
简约版
<span style="font-size:14px;">class Solution(object):
    def titleToNumber(self, s):
        """
        :type s: str
        :rtype: int
        """
        return sum(26**p*(ord(c)-64)for p,c in enumerate(s[::-1]))</span>

64%,唉,还是没养成那种思维啊
<span style="font-size:14px;">class Solution(object):
    def titleToNumber(self, s):
        """
        :type s: str
        :rtype: int
        """
        return reduce(lambda x,y:x*26+y,map(lambda x:ord(x)-64,s))</span>

这个,看后面评论使用map reduce然后发现,时间反而变慢了 18%


Valid Anagram

找出两个字符串是否含有相同的字母只是排序不同,想法是,先看是否具有同样的元素,然后计算每个元素是否出现的次数一样

<span style="font-size:14px;">class Solution(object):
    def isAnagram(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        if set(s) != set(t):
            return False
        else:
            for i, element in enumerate(set(s)):
                if s.count(element) != t.count(element):
                    return False
            return True</span>

52 ms,98.59%,哈哈哈,这好像是最高的一次了


Majority Element

列表中个数大于 n/2 的元素,那肯定是出现最多的元素咯

<span style="font-size:14px;">class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max = 0
        for i, element in enumerate(set(nums)):
            if nums.count(element) > max:
                max = nums.count(element)
                maj = element
        return maj</span>
34.9%
评论区看到一个新思路,但是还是30%多
<span style="font-size:14px;">class Solution(object):
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        return nums[len(nums)/2]</span>

Contains Duplicate

<span style="font-size:14px;">class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        return False if len(nums) == len(set(nums))  else True</span>
one line,But,42%...it's a little low




205. Isomorphic Strings

class Solution(object):
    def isIsomorphic(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: bool
        """
        dic1 = self.cons(s)
        dic2 = self.cons(t)
        s1 = [dic1[x] for x in s]
        t1 = [dic2[x] for x in t]
        return True if s1 == t1 else False

    def cons(self , lst):
        redic = {}
        flag = 0
        for i, ele in enumerate(lst):
            if not ele in redic:
                redic[ele] = flag
                flag +=1
        return redic








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值