【本文首发于优快云个人博客,转载请注明出处。In case of infringement, please contact to delete.】
欢迎交流想法!若有错误请指出。P.S. 欢迎【关注&点赞&收藏】哈~
最近写了几天LeetCode,感觉有必要记录一下每道题遇到的错误,解决办法和搁置问题。不知道能记录多少,争取坚持。
思路简述
我的思路有两个:
暴力:矩阵记录再读取
进阶:记录每组的起始点 / 遍历直接插入最终序列内指向不同位置的Ptr处
第二个思路,给定row nums,可以得到一组的元素个数为2n-2。那么可以通过记录row nums个数的指针指向返回值ans(以下用变量r表示),在指定位置插入元素。只需遍历一遍给定string s即可。
问题
这里面涉及到的问题有以下几个:
1. string的插入元素问题
不知道为什么append不能这么加(声明时未初始化)。
[图1]
改为
r.append(&s[i], 1); //声明插入位置
问题类似同上。
[图2]
改为
r.insert(p[temp] - s0 + 1, &s[i], 1); //(位置,插入元素,插入元素个数)
2. 数组定义
定义数组时尺寸是不能用变量的,但变长度数组作为形参函数引用下来的只能写成 char* p = new char[numRows]
; 是char数组不是char*数组)。数组长度为变量时,初始化也只能写成上述方式。
【遗留1】
3. char问题的解决办法–从“const char[2]“转换为"char”
解决方法指路https://blog.youkuaiyun.com/arriettyandray/article/details/104985355:
a) 将“A”变成‘A’。
将你的双引号变成单引号。
b) 将定义使用到的char都改为char*。
虽然没在运行时debug成功,但我发现解决本题时可以避免使用const。over。【遗留2】
另,放一篇关于const的总结,指路 https://www.cnblogs.com/Harley-Quinn/p/7190110.html
《理解C/C++中const char*、char* const、const char* const》
思路简单来说就是“就近原则”+“符号*的消去”+“const性质”:
(1)const char* p:离p最近的是而不是const,因此p可以修改;现在考虑p[0],那么,对一个指针p使用运算符,操作步骤是消去到p之间的所有部分,那么p就变成了const char类型,被const修饰,因此不可以修改
(2)char const* p:离p最近的是而不是const,因此p可以修改;考虑p[0],消去后为char const,被const修饰,因此不可以修改。结果和(1)一样
(3)char* const p:离p最近的是const而不是*,因此p不可以修改;考虑p[0],消去* const部分剩下的是char,可以修改。
(4)const char** p :离p最近的是而不是const,因此p可以修改;考虑p[0],消去后剩下const char*,距离最近的是而不是const,因此p[0]可以修改;考虑p[0][0],消去后剩下const char,不可修改;
(5)char const** p:同(4)
(6)char* const* p:离p最近的是而不是const,因此p可以修改;考虑p[0],消去后剩下char* const,距离最近的是const而不是*,因此p[0]不可修改;考虑p[0][0],消去* const后剩下char,可修改;
(7)char** const p:离p最近的是const而不是*,因此p不可以修改;考虑p[0],消去* const后剩下char*,距离最近的是*,因此p[0]可以修改;考虑p[0][0],消去*后剩下char,可修改
遗留
- 没有理解指针数组和二维数组指针的区别。(char*a[n] 可以表示指向n维char数组的指针?)存指针的数组应该怎么声明?不定长呢?
- char问题的解决办法–从“const char[2]“转换为"char”。
(隔了几天有点遗忘,收笔。)