3个月用python刷完leetcode600题!-math简单题(二)

十五天的时间,刷完了所有的简单题,避免遗忘,所以开始简单题的二刷,第一遍刷题的时候过得速度比较快,因为我觉得基础不好的我,不要硬着头皮去想最优的方法,而是应该尽量去学一些算法思想,所以每道题只给自己5-10分钟的时间想,想不出来的就去找相关的答案,所以刷的比较快。二刷的时候按照leetcode官方给出的题目分类展开,同时,将解题思路记录于加深印象。
想要一起刷题的小伙伴,我们一起加油吧!
我的github连接:https://github.com/princewen/leetcode_python

231. Power of Two

3个月用python刷完leetcode600题!-math简单题(二)_第1张图片
231. Power of Two

考虑二进制的解法,对于2的倍数来说,它只有一位二进制位不为0,而相邻两个数的按位与有一个特点,就是把大数的最低一位1变为0,举个例子:3的二进制是 11,2的二进制是10,二者按位与是10,3的最后一位1变为了0

class Solution(object):
    def isPowerOfTwo(self, n):
        """
        :type n: int
        :rtype: bool
        """
        return n>0 and not (n & n-1)

258. Add Digits

3个月用python刷完leetcode600题!-math简单题(二)_第2张图片
258. Add Digits

统计规律:
1 % 9 = 1
10 % 9 = 1
100 % 9 = 1
所以答案就是该数余9的结果,如果恰好整除9,则返回9。

class Solution(object):
    def addDigits(self, num):
        """
        :type num: int
        :rtype: int
        """
        return (num % 9 or 9) if num else 0

263. Ugly Number

3个月用python刷完leetcode600题!-math简单题(二)_第3张图片
263. Ugly Number
class Solution(object):
    def isUgly(self, num):
        """
        :type num: int
        :rtype: bool
        """
        if num==0:
            return False
        if num==1:
            return True
        while num % 2 == 0:
            num /= 2
        while num % 3 == 0:
            num /= 3
        while num % 5 == 0:
            num /=5
        return num == 1

268. Missing Number

见数组简单题

367. Valid Perfect Square

3个月用python刷完leetcode600题!-math简单题(二)_第4张图片
Valid Perfect Square

拟牛顿法: http://blog.csdn.net/young_gy/article/details/45766433

class Solution(object):
    def isPerfectSquare(self, num):
        """
        :type num: int
        :rtype: bool
        """
        r = num
        while r*r > num:
            r = (r + num/r) / 2
        return r*r == num

453. Minimum Moves to Equal Array Elements

3个月用python刷完leetcode600题!-math简单题(二)_第5张图片
Minimum Moves to Equal Array Elements

n-1个数加1,相当于所有的数都加1,然后其中一个数减去了1,所以按照这个思路,也就是求将所有数都变成最小的那个数所需要的步骤。

class Solution(object):
    def minMoves(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        return sum(nums) - min(nums) * len(nums)

598. Range Addition II

3个月用python刷完leetcode600题!-math简单题(二)_第6张图片
屏幕快照 2017-06-22 下午6.19.11.png

标就是找到所有变换中第一维最小的数和第二维最小的数,但是没有变换时,所有数都是0,同样大,不能返回0,而是m*n.

class Solution(object):
    def maxCount(self, m, n, ops):
        """
        :type m: int
        :type n: int
        :type ops: List[List[int]]
        :rtype: int
        """
        if not ops:
            return m*n
        m = ops[0][0]
        n = ops[0][1]
        for a in ops[1:]:
            m = min(m,a[0])
            n = min(n,a[1])
        return m * n

如果你喜欢我写的文章,可以帮忙给小编点个赞或者加个关注,我一定会互粉的!
如果大家对leetcode感兴趣,欢迎跟小编进行交流,小编微信为sxw2251,加我要写好备注哟!:

3个月用python刷完leetcode600题!-math简单题(二)_第7张图片
我的微信

你可能感兴趣的:(3个月用python刷完leetcode600题!-math简单题(二))