【算法】模拟算法——Z字形变换(medium)

简介: 【算法】模拟算法——Z字形变换(medium)

题解:模拟算法——Z字形变换(medium)

1.题目

题目链接:LINK

2.题解

利用模拟,来解决问题。

首先创建出一个O(numRows*n)的数组来,并按照题目要求把每个字符按顺序填进去。

这里以numRows = 4,字符串s = "abcdefghijk"为例来演示如下:

然后我们按每行挨个把字符加进去就行了,除了很浪费空间…

所以,我们可以总结规律来进行优化:

规律可以分为两部分:

第一部分是第一行和最后一行,满足如下特点:

下标从numRows-1开始,且后一个比前一个多d

第二部分是中间那些行,满足如下特点:

两两一组,下标从{k,d-k}开始,下一组比前一组多d

图解如下:

3.参考代码

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows == 1) return s;
        int n = s.size();
        string ret;
        int d = 2*numRows - 2;
        
        //先处理第一行
        for(int i = 0; i < n; i+=d)
        {
            ret+=s[i];
        }
        //再处理中间一行
        for(int i = 1; i < numRows - 1; i++)//标识行
        {
            for(int j = i,k = d-i;j < n || k < n;j+=d,k+=d)//这个地方为什么用||来判定是否结束?防止一个条件满足了,另一个不满足从而导致漏字符的情况
            {
                if(j < n) ret+=s[j];//上面判断结束条件有可能是越界的,因而在加入之前应该先判断一下
                if(k < n) ret+=s[k];
            }
        }
        //处理最后一行
        for(int i = numRows-1; i < n; i+=d)
        {
            ret+=s[i];
        }
        return ret;
    }
};

4.总结

大部分的模拟题如果要做优化,大概就是去找其中的规律。


EOF

相关文章
|
6月前
|
算法
【算法】模拟算法——数青蛙(medium)
【算法】模拟算法——数青蛙(medium)
|
6月前
|
算法
【算法】模拟算法——外观数组(medium)
【算法】模拟算法——外观数组(medium)
|
8月前
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
116 3
|
8月前
|
存储 算法 Java
【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)
117 2
|
8月前
|
存储 缓存 算法
【经典算法】LeetCode 1143:最长公共子序列Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 1143:最长公共子序列Java/C/Python3实现含注释说明,Medium)
41 1
|
3天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
79 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
12天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
8天前
|
算法
基于遗传优化算法的风力机位置布局matlab仿真
本项目基于遗传优化算法(GA)进行风力机位置布局的MATLAB仿真,旨在最大化风场发电效率。使用MATLAB2022A版本运行,核心代码通过迭代选择、交叉、变异等操作优化风力机布局。输出包括优化收敛曲线和最佳布局图。遗传算法模拟生物进化机制,通过初始化、选择、交叉、变异和精英保留等步骤,在复杂约束条件下找到最优布局方案,提升风场整体能源产出效率。
|
8天前
|
算法 安全 机器人
基于包围盒的机械臂防碰撞算法matlab仿真
基于包围盒的机械臂防碰撞算法通过构建包围盒来近似表示机械臂及其环境中各实体的空间占用,检测包围盒是否相交以预判并规避潜在碰撞风险。该算法适用于复杂结构对象,通过细分目标对象并逐级检测,确保操作安全。系统采用MATLAB2022a开发,仿真结果显示其有效性。此技术广泛应用于机器人运动规划与控制领域,确保机器人在复杂环境中的安全作业。
|
8天前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。