python_day_2:20180717

leetcode有些题目是很简单的,一行代码敲进去就解决,早上遇到好几道这样的题目,这种就懒得记了。有些代码稍微长点的记在下面。

可以看出今天是超额完成了30行的任务。然而暴露出算法功底太差的缺陷,后面要在这一方面多多加强。

231. 2的幂
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
思路:用2**p,p累加,这样的表达式来比较与数字n的差距。如果两者可以在某个p上相等,那么n就是一个2的幂次方数。
解答:
 1 class Solution(object):
 2     def isPowerOfTwo(self, n):
 3         """
 4         :type n: int
 5         :rtype: bool
 6         """
 7         p=0
 8         while 2**p<n:
 9             p+=1
10         if 2**p==n:
11             return True
12         else:return False

 

 
191. 位1的个数
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
思路:先转化为二进制数,再数里面的1的个数
解答:
class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """
        count=0
        for i in range(len(bin(n))):
            if bin(n)[i]=='1':
                count+=1
        return count
357. 计算各个位数不同的数字个数
给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n。
思路:应该是先设计个函数,用来判断一个数是不是各位都不相同,然后在遍历中调用这个判断函数,同时计数。思路应该是对的,但是算法不高明,超时了,没有通过。后面要好好加强自己算法方面的知识。
解答:耗时过长,算法不行
 1 class Solution(object):
 2     def countNumbersWithUniqueDigits(self, n):
 3         """
 4         :type n: int
 5         :rtype: int
 6         """
 7         count = 0
 8         for i in range(1,10**n):
 9             if self.judge(i):
10                 count+=1
11         return 10**n-count
12     def judge(self,n):
13         strn=str(n)
14         recordn=[]
15         for i in range( len(strn)):
16             if strn[i] not in recordn:
17                 recordn.append(strn[i])
18             else:
19                 return True    
20         return False

 

9. 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
思路:创造一个反写的字符串,判断两个是否相同。
解答:
1 class Solution(object):
2     def isPalindrome(self, x):
3         read=str(x)
4         inverse=''
5         for k in range(len(read)):
6             inverse+=read[-1-k]
7         if inverse == read:
8             return True
9         else:return False

 

400. 第N个数字
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字。
注意:
n 是正数且在32为整形范围内 ( n < 231)。
思路:想到创造一个拼接的字符串,不断在后面加上新项目,直到字符串长度覆盖了我们要关心的n。
问题:还是算法问题,有几条测试耗时太久,估计里面做了太多浪费时间的事情。
解答:(待优化)
1 class Solution(object):
2     def findNthDigit(self, n):
3         numberlist=''
4         number=1
5         while len(numberlist)<n:
6             numberlist += str(number)
7             number+=1
8         return int(numberlist[n-1])

 

 
posted @ 2018-07-17 13:41  code_in_py  阅读(133)  评论(0编辑  收藏  举报