LeetCode 6 - Zigzag Conversion 记录

作者在LeetCode解题过程中遇到的问题主要涉及字符串插入、数组定义以及constchar类型的转换。对于string的插入,作者发现需要初始化后再进行append或insert操作。在处理变长度数组时,需用指针动态分配内存。另外,文章讨论了const在不同指针类型中的作用规则,并提出了解决constchar[]到char转换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【本文首发于优快云个人博客,转载请注明出处。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,可修改

遗留

  1. 没有理解指针数组和二维数组指针的区别。(char*a[n] 可以表示指向n维char数组的指针?)存指针的数组应该怎么声明?不定长呢?
  2. char问题的解决办法–从“const char[2]“转换为"char”。

(隔了几天有点遗忘,收笔。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值