赞
踩
示例:
分析:
老实人本来准备把两个链表转成整型相加再转回链表,被[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]教做人了,unsigned long都顶不住…
注意链表是实际数字的逆序,所以可以直接遍历相加,注意进位就行。
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int carry = 0; ListNode *sumList = new ListNode(-1); ListNode *sumNode = sumList; while (l1 != nullptr || l2 != nullptr){ int x = l1 != nullptr ? l1->val : 0; int y = l2 != nullptr ? l2->val : 0; int sum = x + y + carry; if(sum >= 10){ carry = 1; sum = sum - 10; }else{ carry = 0; } sumNode->next = new ListNode(sum); l1 = l1 != nullptr ? l1->next : nullptr; l2 = l2 != nullptr ? l2->next : nullptr; sumNode = sumNode->next; } if(carry != 0){ sumNode->next = new ListNode(carry); } return sumList->next; } }; 执行用时:24 ms, 在所有 C++ 提交中击败了93.87%的用户 内存消耗:69.4 MB, 在所有 C++ 提交中击败了62.48%的用户
示例:
分析:
滑动窗口,判断重复字符,可以用unorderd_set,也可以遍历查找。
class Solution { public: int lengthOfLongestSubstring(string s) { int start = 0, end = 0; int len = s.size(); int max_count = 0, temp_count = 0; char temp_char; while(end < len){ temp_char = s[end]; for(int i = start; i < end; i++){ //出现重复字符,开始位置移到重复的下一位 if(temp_char == s[i]){ start = i + 1; break; } } end++; temp_count
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。