1、
z字形變換
將字串"paypalishiring"
以z字形排列成給定的行數:
p a h n之後從左往右,逐行讀取字元:a p l s i i g
y i r
"pahnaplsiigyir"
實現乙個將字串進行指定行數變換的函式:
string convert(string s, int numrows);示例 1:
輸入: s = "paypalishiring", numrows = 3示例 2:輸出: "pahnaplsiigyir"
輸入: s = "paypalishiring", numrows = 4分析:題目要求為將字串按「z」型排列後,按行輸入。我們可以先觀察規律,假設字串為『0123456789abcdef』,按照z型排序為:輸出: "pinalsigyahrpi"
解釋:p i n
a l s i g
y a h r
p i
0 6 c1 5 7 b d
2 4 8 a e
3 9 f
class solution:
def convert(self, s, numrows):
""":type s: str
:type numrows: int
:rtype: str
"""sen = ""
k = len(s)
if k <= numrows or numrows == 1:
return s #如果指定行數為1,或字串長度小於行數,直接返回原始字串
for i in range(numrows):
c = i
sen = sen + s[c]
if i == 0 or i == numrows-1 : # i 表示行數,第一行和最後一行符合相同規律
d = 2* numrows - 2
while (c + d) < k:
c = c + d
sen = sen + s[c]
else:
d1 = 2 * ( numrows - i ) - 2 #中間行兩個差值交替
d2 = 2 * ( i + 1 ) - 2
d = (d1,d2)
j = 0
while (c + d[j%2]) < k:
c = c + d[j%2]
sen = sen + s[c]
j = j+1
return sen
2、 羅馬數字轉整數
羅馬數字包含以下七種字元:i
,v
,x
,l
,c
,d
和m
。
字元例如, 羅馬數字 2 寫做數值i 1
v 5
x 10
l 50
c 100
d 500
m 1000
ii
,即為兩個並列的 1。12 寫做xii
,即為x
+ii
。 27 寫做xxvii
, 即為xx
+v
+ii
。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做iiii
,而是iv
。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為ix
。這個特殊的規則只適用於以下六種情況:
給定乙個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。
示例 1:
輸入: "iii"示例 2:輸出: 3
輸入: "iv"示例 3:輸出: 4
輸入: "ix"示例 4:輸出: 9
輸入: "lviii"示例 5:輸出: 58
解釋: c = 100, l = 50, *** = 30, iii = 3.
輸入: "mcmxciv"輸出: 1994
解釋: m = 1000, cm = 900, xc = 90, iv = 4.
分析:該問題比較簡單,比較兩個相鄰羅馬數字的大小,執行不同操作即可。當左邊較小時,可用右邊的大值減去2倍的小值,來補齊多加的部分。
class solution:
def romantoint(self, s):
""":type s: str
:rtype: int
"""numap =
res = 0
for i in range(len(s)):
if i>0 and numap[s[i]] > numap[s[i-1]]:
res = res + numap[s[i]] - 2*numap[s[i-1]]
else:
res = res + numap[s[i]]
return res
leetcode刷題記錄
我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...
LeetCode刷題記錄
動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...
leetcode刷題記錄
工作之餘刷刷題排解下寂寞 1 面試題66.構建乘積陣列 解題思路 題目要求可以簡化為求陣列中任意乙個元素左右兩邊所有元素的乘積。偷懶就用了乙個套路,練習了p c c python class solution def constructarr self,a list int list int 除法是...