兩數之和
題目描述
給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。
解題思路
直接兩重循環遍歷,無腦
代碼實現
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;}
};
兩數相加
題目描述
給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,并且它們的每個節點只能存儲 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
解題思路
輸出結果是鏈表的逆序,所以只需要把兩個鏈表每位上的數字相加為新鏈表的一個結點,不斷的掛鏈即可。
代碼實現
/*** 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;}
};