資料結構演算法 atoi 和兩數相加

2021-10-04 17:50:04 字數 2985 閱讀 8209

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 ...