请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数(可选)一个 'e' 或 'E' ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符('+' 或 '-')下述格式之一:至少一位数字,后面跟着一个点 '.'至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字一个点 '.' ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可选)一个符号字符('+' 或 '-')至少一位数字部分数值列举如下:["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]部分非数值列举如下:["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]示例 1:输入:s = "0"输出:true示
请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。思路:记dpi表示s[0...i]和p[0...j]能否完全匹配,true表示能匹配,false表示不能匹配。如果s[i]==p[j],或者p[j]=='.'。则dp[i][j]=dp[i-1][j-1]。如果p[j]=='*',如果p[j-1]和s[i]相等,则dp[i][j]=dp[i-1][j]或者dp[i][j]=dp[i][j-2]。如果p[j-1]和s[i]不相等,则dp[i][j]=dp[i][j-2]。合起来就是dp[i][j]=dp[i][j-2],如果p[j-1]和s[i]相等或者p[j-1]=='.',则dp[i][j] = dp[i-1][j]代码:class Solutio
在一个排序的链表中,如何删除重复的节点?例如,1,2,3,3,3,4,4,4,5。删除重复的节点后,得到1,2,5链表节点与函数的定义如下:struct ListNode { int value; ListNode* next; }; void deleteDuplicationNode(ListNode* head);思路:思路很直白,遍历节点,找到每一个相同的节点,然后删掉。代码:void deleteDuplicationNode(ListNode* head) { if (head == nullptr) { return; } ListNode* dummyNode = new ListNode(); dummyNode->next = head; ListNode* tmp = dummyNode; while (tmp->next) { if (tmp->next == t
在O(1)时间内删除链表节点给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。链表节点与函数的定义如下:struct ListNode { int value; ListNode* next; }; void DeleteNode(ListNode* head, ListNode* toBeDeleted);思路:如果待删除节点toBeDeleted有下一个节点next,则交换toBedeleted和next的value,然后删除next节点即可在O(1)时间内删除节点。如果没有下一个节点,则从头节点遍历到toBedeleted节点,然后删除toBedeleted节点。时间复杂度为O(1),空间复杂度为O(1)代码:void DeleteNode(ListNode* head, ListNode* toBeDeleted) { if (head == nullptr || toBeDeleted == nullptr) { return; } //如果
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。思路:数字n代表n位十进制数,当n等于100的时候,就有100位十进制数,最大的数有100个9,int、long等是满足不了需求的。所以只能用字符串表示数字。当n为1时,打印1,2,3,4,5,6,7,8,9。当n为2时,打印1,2,3,……,99。当n为3时,打印1,2,3,……,999。观察规律发现,其实就是有n个位置,每个位置从0到9取一遍。就可以得到答案。得到每一个字符串时,有可能出现0001等情况,此时多一步处理把前面的0去掉。代码:class PrintNumber { private: vector<string> ans; public: //去掉前面的0 string prettyNumber(string& str) { string newS; bool zero = true; for(const auto& s:str) {