Add Two Numbers[leetcode]遞迴版本和迴圈版本,numbersleetcode
我寫了兩個版本供參考:
遞迴版本
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { return addTwoNumbers(l1, l2, 0); } ListNode *addTwoNumbers(ListNode *l1, ListNode *l2, int carry) { if(l1 == NULL) return addTwoNumbers(l2, carry); if(l2 == NULL) return addTwoNumbers(l1, carry); l1->val += (l2->val + carry); l1->next = addTwoNumbers(l1->next, l2->next, l1->val / 10); l1->val %= 10; return l1; } ListNode *addTwoNumbers(ListNode *l, int carry) { if(l == NULL) if (carry) return new ListNode(carry); else return NULL; l->val += carry; l->next = addTwoNumbers(l->next, l->val / 10); l->val %= 10; return l; }
非遞迴版本
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { ListNode* root = new ListNode(0); ListNode* cur = root; int carry = 0; do { cur->val = (l1 == NULL ? 0 : l1->val) + (l2 == NULL ? 0 : l2->val) + carry; carry = cur->val / 10; cur->val = cur->val % 10; l1 = (l1 == NULL ? NULL : l1->next); l2 = (l2 == NULL ? NULL : l2->next); if (!l1 && !l2) break; cur->next = new ListNode(0); cur = cur->next; }while (l1 || l2); if (carry) cur->next = new ListNode(carry); return root; }
Add two numbers to 19 and make it less than 20How can it be?
because x+y+19<20 SO x+y<1 SO x<1-y
怎使用 strict 與 warnings
為什麼要用 use strict?眾多的原因之一是幫你尋找因為錯誤拼字造成的錯誤。比如錯誤使用了’$recieve_date’ 變數,但實際上你在程式中已聲明的是 ’$receive_date’ 變數,這個錯誤就很難發現。同樣,use strict 迫使你把變數的範圍縮到最小,使你不必擔心同名變數在程式的其它部份發生不良作用。(儘管這是 my 的功能,但是如果你使用 use strict 的話,它會強迫你用 my 聲明變數,來達到上述目的)。用 use strict 麻煩嗎?不麻煩,只要在你的指令碼的開始加上11個字元而已!(use strict;), 另外在整個程式中用my 聲明變數。不錯,那我怎麼用 use strict 呢?在你的指令碼的開頭 ’#!/usr/local/bin/perl’ 後面加上這句就行。 use strict; 得,程式出錯了,我該怎麼辦?常見的錯誤資訊一般如下: Global symbol "$xxx" requires explicit package name at ./tst line 5. 這是我們要馬上解決的錯誤。(如果出現類似於 ’Server Error’ 之類的錯誤,請檢查一下你的 網頁伺服器上的 error logs, 或用 "CGI::Carp"包。 )任何時候,當你要聲明一個變數時,都要把 ’my’ 放在前面。例如: # 把這段代碼: $string = "hello world"; @array = qw(ABC DEF); %hash = (A=>1, B=>2); # 改成: my $string = "hello world"; my @array = qw(ABC DEF); my %hash = (A=>1, B=>2); # 把這段代碼: # ’$name’ is global here foreach $name (@names) { print "Name: $name\n"; } # 改成: foreach my $name (@names) { # Now ’$name’ only exists in this block print "Name: $name\n"; } # 把這段代碼: # 同樣, ’$digit’ 在這裡是全域變數 foreach $digit (@digits) { $number = 10*$number + $digit; } print "Number: $number\n"; # 改成: (外層的變數(’$number’) # 將在外層聲明): my $number = 0; foreach my $digit (@digits) # 現在’$digit’ 僅僅在這個代碼塊裡存在 $number = 10*$number + $digit; } print "Number: $number\n"; # 把這段代碼: sub my_sub { ($arg1, $arg2) = @_; print "Arg1: $arg1 Arg2: $arg2\n"; } # 改成: sub my_sub { my ($arg1, $arg2) = @_; print "Arg1: $arg1 Arg2: $a......餘下全文>>