leetcode
8atoi
2addtwonumbers
在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號, 選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。 如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。 字串可以在形成整數的字元後面包括多餘的字元,這些字元可以被忽略,它們對於函式沒有影響。 當字串中的第乙個非空字串行不是個有效的整數;或字串為空;或字串僅包含空白字元時,則不進行轉換。 若函式不能執行有效的轉換,返回 0。
def
atoi
(str):
s =strif
not s or
not s.strip():
return
0 ans =
0 ss =
list
(s) sign, i =1,
0 int_max, int_min =2**
31-1,
-2**31
while i <
len(ss)
and ss[i]
==' '
: i +=
1 cnt =
0while i <
len(ss)
and ss[i]in(
'+',
'-')
:if ss[i]
=='+'
: sign =
1else
: sign =-1
cnt +=
1 i +=
1if cnt >1:
sign =
0while i <
len(ss):if
'0'<= ss[i]
<=
'9':
ans = ans *10+
ord(ss[i])-
ord(
'0')
if ans > int_max or sign * ans < int_min:
return int_max if sign ==
1else int_min
else
:break
i +=
1return sign * ans
print
(atoi(
'+-42'
))
`輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
`
class
listnode()
:def
__init__
(self, val)
: self.val = val
self.
next
=none
defadd_two_numbers
(head1, head2):if
not head1 or
not head2:
return head1 if
not head2 else head2
new = listnode(-1
) p = new
# 表示進製
nex =
0while head1 and head2:
tmp = listnode(
(head1.val + head2.val + nex)%10
) p.
next
= tmp
nex =
(head1.val + head2.val + nex)
//10
p = p.
next
head1 = head1.
next
head2 = head2.
next
ifnot head1:
p.next
= head2
ifnot head2:
p.next
= head1
return new.
next
defaddtwonumbers
(self, l1: listnode, l2: listnode)
-> listnode:
head1, head2 = l1, l2
ifnot head1 or
not head2:
return head1 if
not head2 else head2
new = listnode(-1
) p = new
# 表示進製
nex =
0while head1 or head2:
val1 = head1.val if head1 else
0 val2 = head2.val if head2 else
0 tmp = listnode(
(val1 + val2 + nex)%10
) p.
next
= tmp
nex =
(val1 + val2 + nex)
//10
p = p.
next
head1 = head1.
next
if head1 else
none
head2 = head2.
next
if head2 else
none
# 最後需要把進製考慮在內
if nex ==1:
p.next
= listnode(nex)
return new.
next
兩數相加(C 資料結構和演算法練習)
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
演算法 兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 definition for singly ...
演算法 兩數相加
給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 definition for singly ...