[LeetCode] [C++] 第一轮刷题总结(持续更新~~~)

LeetCode 解题报告

LC_1_解题报告
LC_2_解题报告
LC_3_解题报告
LC_4_解题报告
LC_5_解题报告
LC_6_解题报告
LC_7_解题报告
LC_206_解题报告
LC_237_解题报告
LC_344_解题报告

====================================================================
**LeetCode 1. Two Sum **
解题思路:两次循环遍历数组,找到两个元素和等于target
注意点:无
详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_1.html

LeetCode 2 Add Two Numbers
解题思路:用LinkList代表整数中每一个数字,模拟加法进位的方式进行求和计算。

注意点:需要考虑大数情况,不能直接用int保存每个LinkList对应的值。考虑 [5] [5] -> [0, 1] 这种单独进位的情况
详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_2.html

LeetCode 3. Longest Substring Without Repeating Characters
解题思路:两层循环,外层循环负责定位substring的起始点,内层循环负责定位substring的终点
字符串从前向后遍历,每次遍历一个字符,将其加入set,判断下一个字符是否在set中,
如果已经在,则退出内层循环

注意方向:用set保存已经加入的字符char,合理运用可用的数据结构
详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_3.html

LeetCode 4. Median of Two Sorted Arrays
解题思路:将两个有序数组合并后,再找出中数。利用C++ vector动态增加特性

注意方向:合并逻辑,依次比较两个数组的首元素,小的往新数组里面添加,并向后移动一位
详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_4.html

LeetCode 5. Longest Palindromic Substring
解题思路:中心回溯法。由中心字符向两边找,如果两边字符一样,再向外扩散,直到不一样的情况,就可以找出最长回文子串了

注意点:

  1. 注意区分偶数字符回文子串以及奇数字符个数回文子串
  2. 注意向两侧遍历时,遇到字符不一样的情况时,回文子串是start+1,end-1. 不要算上左右不等的那两个字符
    详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_5.html

LeetCode 6. ZigZag Conversion
解题思路:字符串之字形排序。找出排序规律。
规律:一共有N行,则total = 2*(N-1)个字符组成一个完整序列。序列中下标idx % total
如果大于N则下标换为(total-idx) % total ,下标对应在第几行
注意点:首先读懂题目,了解要求,找到每个位置应该存放什么字符的规律.
详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_6.html

LeetCode 7. Reverse Integer
解题思路:通过bool值判断是否为负数,然后将负数转换为正数。再将正数的每一个数字进行vector
保存。然后先通过判断vector中每个数字判断是否会反转溢出

注意点:1.x == -2147483648直接返回0,因为取正数时已经溢出 2. 判断存储的每一个数字翻转后是否溢出
详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_7.html

LeetCode 206. Reverse Linked List
解题思路:

  1. 将链表每个节点数值存在vector中,再反序遍历生成新的链表。这种解法需要空间复杂度O(N)
  2. 空间复杂度为1的做法,在每次遍历其中一个节点时,用一个指针保存当前节点的前一个节点,
    一个指针保存当前节点的下一个节点在每次遍历时,都操作当前节点的翻转动作

整个过程分4步骤
(1)获取当前的下一个节点指针,用于遍历到下一个节点 (2)当前节点的下一个节点重新指向到前一个
(3)前一个等于当前 (4) 当前等于下一个 即形成了一个节点的完整翻转逻辑

注意方向:空间复杂度O(1)的方式,针对每个节点进行翻转 最终翻转这个单项链表.注意原来的
头结点的next复制NULL
详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_206.html

LeetCode 237. Delete Node in a Linked List
解题思路:这道题要换一个思路,不能考虑将node前面的节点的next直接指向node的下一个,因为node前面那个节点的
指针在单向链表中根本不可能获取到。再考虑到要删除的node不为尾节点,这里考虑采用node拷贝替换的方式
将当前要删除的node值完全拷贝为他后一个的值(node->val= node->next->val, node->next = nodex->next->next)
类似于深拷贝概念,将后面Node完整拷贝到前面,形成删除了前面节点的效果

注意点:转换思维,不能寻找Node前一个节点的死路上遇到死胡同。 单项链表中,没法获取当前Node之前的Node
详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_237.html

LeetCode 344 Reverse String
解题思路:将string中前后字符颠倒

注意方向:采用前后置换法,将str[0] 和 str[size-1] 进行依次交换
详细信息:http://www.cnblogs.com/lihuagang/p/leetcode_344.html

posted @ 2017-04-20 20:44  hgli_00  阅读(516)  评论(0编辑  收藏  举报