2つの数値の合計
タイトルの説明
整数配列numsとターゲット値targetを指定して、合計が配列内のターゲット値である2つの整数を見つけ、それらの配列インデックスを返します。
各入力は1つの回答にのみ対応すると想定できます。ただし、この配列で同じ要素を再利用することはできません。
問題解決のアイデア
直接ダブルループトラバーサル、脳なし
コードの実装
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int>res;
for(int i = 0; i<nums.size();++i)
{
for(int j = i+1;j<nums.size();++j)
{
if(nums[i]+nums[j] == target)
{
res.push_back(i);
res.push_back(j);
}
}
}
return res;
}
};
2つの数値を加算
タイトルの説明
空でない2つのリンクされたリストは、2つの負でない整数を表すために指定されています。それらの中で、それぞれの数字は逆の順序で格納され、それらのノードのそれぞれは1つの数字のみを格納できます。
これら2つの数値を加算すると、それらの合計を表す新しいリンクリストが返されます。
数字の0を除いて、これらの数字のどちらも0で始まらないと想定できます。
問題解決のアイデア
出力結果はリンクリストの逆の順序であるため、2つのリンクリストの各ビットに新しいリンクリストのノードとして番号を追加し、チェーンを継続的に吊るすだけで済みます。
コードの実装
/**
* 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* newHead = new ListNode(-1); //新链表
ListNode* Cur = newHead;
int sum = 0; //每一位上面的和
bool carry = false; //进位标志
while(l1!=NULL || l2!=NULL)
{
sum = 0;
if(l1!=NULL)
{
sum+=l1->val;
l1=l1->next;
}
if(l2!=NULL)
{
sum+=l2->val;
l2= l2->next;
}
if(carry)
{
sum+=1;
}
Cur -> next = new ListNode(sum%10);
carry = sum>=10? true:false;
Cur = Cur->next;
}
if(carry)
{
Cur->next = new ListNode(1);
}
//没有头节点,返回头结点的下一个结点
return newHead->next;
}
};