type
status
date
slug
summary
tags
category
icon
password
前言:
一个Zigzag字符串变换,自己做的时候只考虑到了下行变换,而且存在越界问题,交给GPT分析后优化出来的真牛逼啊,要是笔试能用chatgpt就好了。
题目描述
题解
分析
原始代码的一些问题
- 数组大小问题:C++不允许动态大小的数组。此代码中,
char arr[numRows][len];
这一行可能无法编译,因为 numRows 和 len 可能是运行时确定的。你应该使用vector<vector<char>>
或者其他动态数据结构来代替。
- 数组初始化问题:在C++中,当你创建一个数组时,它不会自动初始化为0或空字符。在这个程序中,如果有些数组元素没有被赋值,它们可能会包含垃圾值,这可能会在后续的操作中导致问题。
- 索引错误:在第二个嵌套循环中,你试图访问
arr[i][j]
,但是i
和j
的范围是len
和numRows
,这可能会导致数组越界错误,因为数组的大小是numRows
行len
列。你应该将arr[i][j]
更改为arr[j][i]
。
- ZigZag模式问题:这个代码只考虑了ZigZag模式的“下行”部分,没有考虑“上行”部分。这使得代码不能正确地实现ZigZag模式的转换。
- 性能问题:你的代码使用了两个嵌套循环来填充和读取数组,这可能导致性能问题。如果字符串很长,这将是一个问题。你可以尝试优化代码,以便在一次遍历中完成转换。
题解算法分析
- 创建了一个动态字符串向量vector<string> rows(min(numRows, int(s.size())))
- curRow 是当前行的指针,goingdown则代表着是下行还是上行。
- 在循环中,每一行会逐步的增加字符,丰富字符串,然后到最后,拼接结果就行
- Author:KIRITO
- URL:https://kirito.work/article/af0b0f76-499c-4e40-85c2-c8b6b0293754
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!