组合
其实有点蒙,二维数组,如何行数不定,列数固定
这里创建了vector<vector<int>>以及vector<int>,利用.push_back(),pop_back()
class Solution {
private:
vector<vector<int>> result;
vector<int> path;
public:
void back(int k,int start, int n){//如何标记已经遍历过的?--是按顺序的,不用考虑标记
if(path.size() == k){
result.push_back(path);
return;
}
// for(int i = 1;i<=n-path.size();i++){//树的横向遍历,path.size()=0,i->4
for(int i = start;i<=n;i++){
path.push_back(i);
back(k,i+1,n);//start+1 VS i+1
path.pop_back();
}
}
vector<vector<int>> combine(int n, int k) {
back(k,1,n);
return result;
}
};
链表相交(23min)
面试题 02.07. 链表相交 - 力扣(LeetCode)
法一:暴力循环
这个是题目会自己定那个指针开始相交,所以是判断指针相等,简单的方法是两个while循环遍历。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {//p==q
ListNode *p = headA;
ListNode*q = headB;
while(p != nullptr){
while(q!=nullptr){
if(p == q){
return q;
}else{
q= q->next;
}
}
q = headB;
p = p->next;
}
return nullptr;
}
};
法二:O(n)解法【类似于删除链表倒数第n个元素】
看了代码随想录提示,
思路:假如两个链表相交长度是a,一个长m+a,一个长n+a
相当于将长的那个指针从头指针向右移|m-n|个单位,后面就一般长了,就可以一起移动指针,直到p==q;
错误总结:for的起止;while的终止条件;if写了else没写,先写结构整体试试
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {//p==q
ListNode *dummyheadA = new ListNode(0);
ListNode*dummyheadB = new ListNode(0);
ListNode *p = dummyheadA;
ListNode*q = dummyheadB;
dummyheadA->next = headA;
dummyheadB->next = headB;
int asize = 0,bsize = 0;
while(p->next!=nullptr){
p = p->next;
asize++;
}
while(q->next!=nullptr){
q = q->next;
bsize++;
}
if(asize<bsize){//要让长的是p
p = dummyheadB;
q= dummyheadA;
int csize = asize;
asize = bsize;
bsize = csize;
}else{//忘了
p = dummyheadA;
q = dummyheadB;
}
for(int i = 1;i<=asize-bsize;i++){//i应该从1到asize-bsize
p = p->next;
}
while(p!=nullptr){//p->next!=nullptr([1],[1]测试用例没过)
if(p==q){
return p;
}
p = p->next;
q= q->next;
}
return nullptr;
}
};