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])