給定兩個以字串形式表示的非負整數num1
和num2
,返回num1
和num2
的乘積,它們的乘積也表示為字串形式。
eg
輸入:num1 = 「123」, num2 = 「456」
輸出:「56088」
要求
不能使用任何標準庫的大數型別(比如 biginteger)或直接將輸入轉換為整數來處理。
因為要求不能直接轉化為整型數計算,所以我的想法是,利用兩個迴圈,將每個單獨數字字元轉化為整形,然後像小學時的乘法算式一樣計算,時間複雜度為o(mn),m,n分別為兩個字串的長度,如下圖:
具體的**實現如下:
l1,l2=
list
(num1)
,list
(num2)
res=
0for i in l1:
res*=
10 tmp=
0 ii=
int(i)
for j in l2:
tmp=tmp*
10+ii*
int(j)
res+=tmp
return
str(res)
給定乙個沒有重複數字的序列,要求返回它的全排列
eg
輸入:[1,2,3]
輸出:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
用回溯方法,深度遍歷陣列,每次取乙個數,實現如下:
res=
defdfs
(n):
if n==
len(nums)-1
:#遍歷到最後乙個數則結束,並將當前排列新增到答案中:]
)return
for i in
range
(n,len
(nums)):
nums[i]
,nums[n]
=nums[n]
,nums[i]
dfs(n+1)
nums[i]
,nums[n]
=nums[n]
,nums[i]
dfs(0)
return res
上面這個方法在取數時,利用互換的方式取數,未使用額外的空間,其實還可以換種做法,定義乙個空陣列tmp,作為臨時儲存使用。
res=
defdfs
(n,tmp):if
not n:
return
for i in
range
(len
(n))
:#取出第i個數加到tmp裡
dfs(n[
:i]+n[i+1:
],tmp+
[n[i]])
dfs(nums,
)return res
給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
eg
輸入:[-2,1,-3,4,-1,2,1,-5,4]
輸出:6
解釋:連續子陣列 [4,-1,2,1] 的和最大,為 6。
用乙個數來儲存當前最大的連續和,每遍歷到乙個數,看之前的連續和是不是正的
tmp=nums[0]
res=tmp
for i in
range
(len
(nums)):
if tmp>0:
tmp+=nums[i]
else
: tmp=nums[i]
res=
max(res,tmp)
return res
時間複雜度為o(n)
同樣的遍歷,直接在原陣列上記錄當前最大的連續和。
時間複雜度也是o(n)
for i in
range(1
,len
(nums)):
nums[i]
=max
(nums[i-1]
+nums[i]
,nums[i]
)return
max(nums)
JAVA學習筆記Day6
型別相同,個數不同時構成可變引數。列 private static int sumup int.values 1 氣泡排序 相鄰的兩個數比較大小並按規律調換位置,值到確定從數值依次從小到大。2 選擇排序 確定乙個位置最大或最小,然後分別用其餘的數與當前確定位置的數進行比較,如果想拿到從大到小,那麼每...
python學習筆記 day6
open方法基本使用 open file,mode r encoding none 幾種開啟模式 r 唯讀模式 w 寫模式,如果檔案在,先清空 危險!x 建立模式,如果檔案在,會報錯 a 類似日誌 b 二進位制模式 t 文字模式 r w 個 件物件被open 法建立後,這個物件可 的有下 這些 cl...
Day 6 學習筆記 可信計算 6
乙個不小心就幾天沒有學習,我覺得可能是因為幾天前交了週報的原因,我一下子就放鬆了起來,打了幾天的懷舊遊戲。今天閱讀的主要內容來自一本書,a practical guide to tpm2.0 這本書來自於師兄推薦,作者是tpm2.0的專案負責人。很值得一讀。目前我只閱讀了書的前兩章,但是第二章只看了...