前言
如果编程只是重复敲一些没有价值代码,
那不是我所向往的编程生活。
如果生活只是重复做一些没有枯燥无味的事情,
那不是我所向往的生活。
所以,我们始终要为心底坚持的美好而努力。
本篇目录
两数相加
题目:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
已过答案:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *l3 = new ListNode(0);
ListNode *tempList = l3;
int num = 0;
while (l1 || l2) {
if (l1) {
num += l1->val;
l1 = l1->next;
}
if (l2) {
num += l2->val;
l2 = l2->next;
}
tempList->next = new ListNode(num%10);
num /= 10;
tempList = tempList->next;
}
if (num > 0) {
tempList->next = new ListNode(1);
}
return l3->next;
}
};
解析:
- 考察c++类构造函数,初始化列表等基础概念
- 考察最基本的c++链表操作
- 算法级别如题,属于小学加减题
无重复字符的最长子串
题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
已过答案
class Solution {
public:
int lengthOfLongestSubstring(string s) {
// 判空
if(s.empty()) {
return 0;
}
string result(s,0,1);
int temp = 1;
int maxCount = 1;
int tempCount = 1;
while (temp <= s.size()-1) {
string str1(s,temp,1);
char *str = strrchr((char*)result.c_str(),*str1.c_str());
if (str == NULL) {
result = result + str1;
tempCount += 1;
}else {
string tempStr = str;
string needStr(tempStr,1,tempStr.size()-1);
result = needStr + str1;
tempCount = result.size();
}
if (tempCount > maxCount) {
maxCount = tempCount;
}
temp++;
}
return maxCount;
}
};
考点
- c++基础知识
- c++字符串基本操作
- 基本逻辑操作
思路
从首字符串开始,依次和下一个index的字符对比,
如果不包含则合并两个字符串,
如果包含,从与该字符相同的最后一个字符index+1开始合并,直到末尾
该算法还有较大优化空间,好晚了,先这样。。。