【LeetCode】LeetCode——第2題:Add Two Numbers
LeetCode第2題テーマ:
2. Add Two Numbers My Submissions
Question
Total Accepted: 111272
Total Submissions: 512942
Difficulty: Medium
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8
タイトルの大まかな意味は:1つの整数は342のようで、チェーンテーブルの中で形式を保存するのは倒れています(つまり:2->4->3)、更に465のようで、チェーンテーブルの中で形式を保存するのは:5->6->4です.この2つの数を807に加算し、チェーンテーブルに格納して7−>0−>8と表現した.
この問題は難易度が中等で、実際には比較的直観的で、主にチェーンテーブルの操作を考察して、もちろん2つの数の長さの違い、および10進数の進位のいくつかの小さい細部に注意しなければならない.
コード:
コードを提出したら、無事ACを落とします.
run time
40 msです.
2. Add Two Numbers My Submissions
Question
Total Accepted: 111272
Total Submissions: 512942
Difficulty: Medium
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8
タイトルの大まかな意味は:1つの整数は342のようで、チェーンテーブルの中で形式を保存するのは倒れています(つまり:2->4->3)、更に465のようで、チェーンテーブルの中で形式を保存するのは:5->6->4です.この2つの数を807に加算し、チェーンテーブルに格納して7−>0−>8と表現した.
この問題は難易度が中等で、実際には比較的直観的で、主にチェーンテーブルの操作を考察して、もちろん2つの数の長さの違い、および10進数の進位のいくつかの小さい細部に注意しなければならない.
コード:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *p = l1, *q = l2;
ListNode *r = (ListNode *)malloc(sizeof(ListNode));
ListNode *s = r;
int shi_val = 0;
while(p && q){
ListNode *t = (ListNode *)malloc(sizeof(ListNode));
t->val = (p->val + q->val + shi_val) % 10;
shi_val = (p->val + q->val + shi_val) / 10;
s->next = t;
s = t;
p = p->next;
q = q->next;
}
while(p){
ListNode *t = (ListNode *)malloc(sizeof(ListNode));
t->val = (p->val + shi_val) % 10;
shi_val = (p->val + shi_val) / 10;
s->next = t;
s = t;
p = p->next;
}
while(q){
ListNode *t = (ListNode *)malloc(sizeof(ListNode));
t->val = (q->val + shi_val) % 10;
shi_val = (q->val + shi_val) / 10;
s->next = t;
s = t;
q = q->next;
}
if(shi_val){
ListNode *t = (ListNode *)malloc(sizeof(ListNode));
t->val = shi_val;
s->next = t;
s = t;
}
s->next = NULL;
return r->next;
}
};
コードを提出したら、無事ACを落とします.
run time
40 msです.