C++で2つの数値IIを追加する
2つの非負の整数を表す2つの空でないリンクリストがあるとします。ここでは、最上位桁が最初に来て、それらの各ノードに1桁が含まれています。 2つの数値を追加して、リンクリストとして返す必要があります。したがって、リストが[7、2、4、3] + [5、6、4]の場合、結果は[7、8、0、7]
になります。これを解決するには、次の手順に従います-
-
ダミーと呼ばれるノードを作成し、値0を格納し、スタックs1とs2を作成します。
-
s1をl1のノードで埋め、s2をs2のノードで埋めます。
-
合計:=0
-
s1が空でないかs2が空でない間
-
s1が空の場合、sum:=sum + s1の最上位値、スタックs1から削除
-
s2が空の場合、sum:=sum + s2の最上位値、スタックs2から削除
-
ダミーの値:=sum mod 10
-
new node:=値sum / 10
で新しいノードを作成します -
新しいノードの次:=ダミー
-
ダミー:=新しいノード
-
合計:=合計/ 10
-
-
ダミー値が0の場合は、ダミーの次を返します。それ以外の場合は、ダミーを返します。
例(C ++)
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class ListNode{ public: int val; ListNode *next; ListNode(int data){ val = data; next = NULL; } }; ListNode *make_list(vector<int> v){ ListNode *head = new ListNode(v[0]); for(int i = 1; i<v.size(); i++){ ListNode *ptr = head; while(ptr->next != NULL){ ptr = ptr->next; } ptr->next = new ListNode(v[i]); } return head; } void print_list(ListNode *head){ ListNode *ptr = head; cout << "["; while(ptr){ cout << ptr->val << ", "; ptr = ptr->next; } cout << "]" << endl; } class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* dummy; dummy = new ListNode(0); stack <ListNode*> s1, s2; while(l1){ s1.push(l1); l1 = l1->next; } while(l2){ s2.push(l2); l2 = l2->next; } int sum = 0; while(!s1.empty() || !s2.empty()){ if(!s1.empty()){ sum += s1.top()->val; s1.pop(); } if(!s2.empty()){ sum += s2.top()->val; s2.pop(); } dummy->val = (sum % 10); ListNode* newNode = new ListNode(sum / 10); newNode->next = dummy; dummy = newNode; sum /= 10; } return dummy->val == 0? dummy->next : dummy; } }; main(){ vector<int> v1 = {7,2,4,3}; ListNode *h1 = make_list(v1); vector<int> v2 = {5,6,4}; ListNode *h2 = make_list(v2); Solution ob; print_list(ob.addTwoNumbers(h1, h2)); }
入力
[7,2,4,3] [5,6,4]
出力
[7, 8, 0, 7, ]
-
C++で2つのバイナリ文字列を追加するプログラム
2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},
-
Pythonで2つの数値を追加する
空でないリンクリストを2つ指定したとします。これらの2つのリストは、2つの非負の整数を表しています。数字は逆の順序で保存されます。各ノードには1桁しか含まれていません。 2つの数値を加算し、結果をリンクリストとして返します。 2つの数値には、数値0自体を除いて、先行ゼロが含まれていないと想定しています。したがって、数値が120 + 230の場合、リンクリストは[0→2→1]+[0→3→2]=[0→5→3]=350になります。 これを解決するために、次の手順に従います 2つのリストl1とl2を取ります。ヘッドと温度をnullとして初期化します c:=0 l1とl2はどちらも空でないリスト