日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LintCode刷起来(一)

發(fā)布時(shí)間:2024/4/17 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LintCode刷起来(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

LintCode刷起來(一)

1. A + B 問題

  • 方法一:
class Solution:"""@param a: An integer@param b: An integer@return: The sum of a and b """def aplusb(self, a, b):# write your code herereturn a + b
  • 方法二:
class Solution:"""@param a: An integer@param b: An integer@return: The sum of a and b """def aplusb(self, a, b):# write your code herereturn sum([a, b])
  • 方法三:
from operator import addclass Solution:"""@param a: An integer@param b: An integer@return: The sum of a and b """def aplusb(self, a, b):# write your code herereturn add(a, b)

2 · 尾部的零

大佬救命,大佬饒命
大佬還是大佬,太強(qiáng)了。想要知道有多少個(gè)0也就是里面有這n個(gè)數(shù)可以拆分出來多少個(gè)2和5。很顯然5的個(gè)數(shù)遠(yuǎn)遠(yuǎn)小于2的個(gè)數(shù),所以這n個(gè)數(shù)可以拆分出來多少個(gè)5也就是多少個(gè)0.
不得不說大佬思路太強(qiáng)了。下面也就是找1234···n-1n里面可以拆分出多少個(gè)5了很顯然5的倍數(shù)必定可以拆分出至少一個(gè)5,同時(shí)25的倍數(shù)可以拆分出至少兩個(gè)5,依次類推,5^i次方至少可以拆分出來i個(gè)5,我們可以第一次只統(tǒng)計(jì)5的倍數(shù),然后5 ^ 2的倍數(shù)依次類推到5 ^ i的倍數(shù),所有個(gè)數(shù)加起來即可。

class Solution:"""@param n: A long integer@return: An integer, denote the number of trailing zeros in n!"""def trailingZeros(self, n):# write your code herenum = 0i = 5while n>=i:num += n//ii = i * 5return num

3 · 統(tǒng)計(jì)數(shù)字

  • 方法一:偷個(gè)懶直接用python的內(nèi)置函數(shù) cout來做,可以用來查找一個(gè)字符串中指定字符的個(gè)數(shù)
class Solution:"""@param k: An integer@param n: An integer@return: An integer denote the count of digit k in 1..n"""def digitCounts(self, k, n):# write your code hereresult = 0for item in range(0, n+1):number = str(item).count(str(k))result += numberreturn result
  • 方法二:
    笨笨的方法對(duì)每個(gè)數(shù)都進(jìn)行統(tǒng)計(jì),能力所限,懶得優(yōu)化了,據(jù)大佬說可以優(yōu)化到O(logN)
class Solution:"""@param k: An integer@param n: An integer@return: An integer denote the count of digit k in 1..n"""def digitCounts(self, k, n):# write your code hereresult = 0if k == 0 :result += 1for i in range(n+1):temp = iwhile temp:if temp % 10 == k:result +=1temp//=10return result
  • 方法三:大佬的方法,感興趣的看看就好
class Solution:"""@param: : An integer@param: : An integer@return: An integer denote the count of digit k in 1..n"""def digitCounts(self, k, n):def ten(power):return 10**powerdigits = self.getNumOfDigits(n)ans = 0if k == 0:for i in range(digits-1):ans += (n // ten(i+1) -1) * ten(i)ans += min(n % ten(i+1), ten(i) - 1) + 1ans += 1else:for i in range(digits):ans += n // ten(i+1) * ten(i)ans += max(0, min( (k+1)*ten(i)-1, n%ten(i+1) ) - k*ten(i) + 1)return ans@staticmethoddef getNumOfDigits(n):if n == 0:return 1count = 0while n:count += 1n //= 10return count

4 · 丑數(shù) II

其實(shí)思路很明確也很簡單,枚舉肯定最麻煩而且也不可取。由于整數(shù)均可以劃分為素?cái)?shù)不同冪次的乘積且只有一種情況。只有質(zhì)因子2、3、5所以它必定是這三個(gè)數(shù)的不同冪次的乘積,所以我們只需要有效到大依次找到并且第N個(gè)就好了。

class Solution:"""@param n: An integer@return: the nth prime number as description."""def nthUglyNumber(self, n):# write your code hereheap = [1]p2,p3,p5 = 0,0,0for i in range(n - 1):last = heap[-1]while heap[p2] * 2 <= last:p2 += 1while heap[p3] * 3 <= last:p3 += 1while heap[p5] * 5 <= last:p5 += 1heap.append(min(heap[p2] * 2, heap[p3] * 3, heap[p5] * 5))return heap[-1]

我看網(wǎng)上還有一種堆排序的算法也是可以的
seen采用元組的因?yàn)椴檎曳奖?#xff0c;運(yùn)用了空間換時(shí)間的方法
求第n小的丑數(shù),可以采用最小堆來解決。每次彈出堆中最小的丑數(shù),然后檢查它分別乘以2、3和 5后的數(shù)是否生成過,如果是第一次生成,那么就放入堆中。第n個(gè)彈出的數(shù)即為第n小的丑數(shù)。
至于為什么要判斷是否生成過,因?yàn)槿绻钚?的時(shí)候4,6,10會(huì)放入,但是當(dāng)最小為3時(shí)6,9,10也會(huì)放入,同理5最小時(shí)10,15,25也會(huì)放入。這樣可以將重復(fù)的6和10排除,方便堆排序

import heapqclass Solution:"""@param n: An integer@return: return a integer as description."""def nthUglyNumber(self, n):heap = []heapq.heappush(heap, 1)seen = set()seen.add(1)factors = [2, 3, 5]curr_ugly = 1for _ in range(n):# 每次彈出當(dāng)前最小丑數(shù)curr_ugly = heapq.heappop(heap)# 生成新的丑數(shù)for f in factors:new_ugly = curr_ugly * fif new_ugly not in seen:seen.add(new_ugly)heapq.heappush(heap, new_ugly)return curr_ugly

總結(jié)

以上是生活随笔為你收集整理的LintCode刷起来(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。