本文链接:
https://blog.csdn.net/qq_34811382/article/details/113357998
237. 删除链表中的节点
思路:
把要删除的节点的下一个节点的值赋给该节点,删除下一个节点,在令该节点的下一位指向下一位的下一位。
class Solution
{
public:
void deleteNode(ListNode *node)
{
node->val = node->next->val;
node->next = node->next->next;
}
};
238. 除自身以外数组的乘积
思路:
记录两个数组,一个记录左边的乘积,一个记录右面的乘积
class Solution
{
public:
vector<int> productExceptSelf(vector<int> &nums)
{
vector<int> res(nums.size(), 1);
int left = 1, right = 1;
for (int i = 0, j = nums.size() - 1; i < nums.size(); i++, j--)
{
res[i] *= left;
res[j] *= right;
left *= nums[i];
right *= nums[j];
}
return res;
}
};
292. Nim 游戏
思路:
你拿一个,只要对面拿n-1 or n-2 or n-3 有一个输了,你就可以赢。但是会超时
bool canWinNim(int n)
{
if (n < 4)
return true;
if (canWinNim(n - 1) == false || canWinNim(n - 2) == false || canWinNim(n - 3) == false)
return true;
return false;
}
想着超时,于是跑了一下,想找一下规律,发现只有是4的倍数,就会false
/* 1 true
2 true
3 true
4 false
5 true
6 true
7 true
8 false
9 true
10 true
11 true
12 false
13 true
14 true
15 true
16 false
17 true
18 true
19 true
20 false
21 true
22 true
23 true
24 false
25 true
26 true
27 true
28 false
29 true
30 true
31 true
32 false
33 true
34 true
35 true
36 false
37 true
38 true
39 true
40 false
41 true
42 true
43 true
44 false
45 true
46 true
47 true
48 false
49 true
[Done] exited with code=1 in 228.001 seconds */
所以我想着直接看给的值是不是4的倍数就可以了。
代码:
class Solution {
public:
bool canWinNim(int n) {
return n%4!=0;
}
};