0%

第四周:学会在思路阶段思考问题

2019年4月16日 下午2:02

  1. 正如群里大神所说:我在思路阶段没有认真思考,导致返工浪费时间。
    1. 我的发现我有一个特点:把问题想复杂,自己给自己找事。
    2. 解决方法:不断的提醒自己,这题没有多复杂,正常做就行,你的目标是解决问题,而不是高深的算法,别本末倒置
    3. 目的是为了简化问题,而不是加大难度
  2. 而且,我的编码能力的确还有待提高
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* 我写的这个算法效率非常低,低于95%
* 1.如何新建链表,这里要理解对象是创建在堆中的,不会释放
* 2.这里没有求链表的长度,而是使用是否等于null来判断
* 3.在思路阶段:我没有认真的分析题目,把问题想复杂了,我现在也不知道我当初在是怎么想的,说明当初就是没有逻辑的瞎想
* 4.在编码阶段:我对链表中的指针到底指向谁(具体是当前,还是前一个)没有了然于胸,关键是自己没有意识到这个问题:这个指针我定义的指向谁?
* 5.head的链表和num数组对应关系是啥?这个我也没有想过
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head = NULL;

ListNode* index = new ListNode(0);
head = index;

ListNode* l1_index = l1;
ListNode* l2_index = l2;

int num[100000]={0};

for(int i=0; (l1_index!=NULL && l2_index!=NULL) ; i++){

int ans = l1_index->val+l2_index->val;
index->next = new ListNode(ans%10);
num[i] = ans>=10?1:0;

l1_index = l1_index->next;
l2_index = l2_index->next;

index = index->next;
}

if(l1_index == NULL){
for(int i=0; l2_index!=NULL; i++){
index->next = l2_index;

l2_index = l2_index->next;
index = index->next;
}
}
else{
for(int i=0; l1_index!=NULL; i++){
index->next = l1_index;

l1_index = l1_index->next;
index = index->next;
}
}

//进位
index = head->next;
int i = 0;
for(i=0; index->next!=NULL; i++){
int ans = index->next->val+num[i];

if(ans < 10){
index->next->val = ans;
}
else{
index->next->val = ans%10;
num[i+1]++;
}
index = index->next;
}

//处理最后一位进位的情况
if(num[i]!=0){
index->next = new ListNode(num[i]);
}
return head->next;
}
};