1.没啥说法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int i=0;
ListNode* l=new ListNode();
ListNode* p=nullptr;
p=l;
int jiwei=0;
p->val=(l1->val+l2->val+jiwei)%10;
if((l1->val+l2->val+jiwei)>=10){
jiwei=1;
}else{
jiwei=0;
}
while(l1->next!=nullptr&&l2->next!=nullptr){
ListNode* l3=new ListNode();
p->next=l3;
p=p->next;
l1=l1->next;
l2=l2->next;
p->val=(l1->val+l2->val+jiwei)%10;
if((l1->val+l2->val+jiwei)>=10){
jiwei=1;
}else{
jiwei=0;
}
}
while(l1->next!=nullptr){
ListNode* l3=new ListNode();
p->next=l3;
p=p->next;
l1=l1->next;
p->val=(l1->val+jiwei)%10;
if(l1->val+jiwei>=10){
jiwei=1;
}else{
jiwei=0;
}
}
while(l2->next!=nullptr){
ListNode* l3=new ListNode();
p->next=l3;
p=p->next;
l2=l2->next;
p->val=(l2->val+jiwei)%10;
if(l2->val+jiwei>=10){
jiwei=1;
}else{
jiwei=0;
}
}
if(jiwei==1){
ListNode* l3=new ListNode();
p->next=l3;
p=p->next;
p->val=1;
}
return l;
}
};
2.纯用脑分析,没啥技巧。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int i=0;
int l=0;
int l1=0;
unordered_map<char,int>m;
if(s.length()==0)return 0;
while (i<s.length()){
auto it=m.find(s[i]);
if(it ==m.end()){
m[s[i]]=i;
l1++;
}else{
l1=min(i-it->second,l1+1);
m.erase(it);
m[s[i]]=i;
}
l=max(l,l1);
i++;
}
return l;
}
};
map.count也可以用
hash.count(cur)
使用滑动窗口。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int i=0;
int l=0;
int left=0;
int n= s.length();
unordered_map<char,int>m;
if(n==0)return 0;
while (i<n){
auto it=m.find(s[i]);
if(it !=m.end()){
l=max(l,i-left);
left=max(left, m[s[i]]+1);
}
m[s[i]]=i;
i++;
}
return max(l,i-left);
}
};