个人网站做音乐网要备文化罗湖做网站公司排名
个人网站做音乐网要备文化,罗湖做网站公司排名,网站推广计划书,北京免费模板建站目录
#x1f388;了解题意
#x1f388;算法原理
#x1f6a9;先处理第一行和最后一行
#x1f6a9;再处理中间行
#x1f388;实现代码 #x1f388;了解题意
大家看到这个题目的时候肯定是很迷茫的#xff0c;包括我自己也是搞不清楚题目什么意思#xff0c;我…目录
了解题意
算法原理
先处理第一行和最后一行
再处理中间行
实现代码 了解题意
大家看到这个题目的时候肯定是很迷茫的包括我自己也是搞不清楚题目什么意思我们静下心来看看我来给大家说透彻这个题目的意思。
我们输入字符串ABCDEFGHIJKL,行数是四行时我们是按照Z字形排列。先向下排四行然后斜向上排列到四行之后然后向下排列四行......。我们用一块一块的方格来填字符 然后我们输出的是像数组一样遍历 输出结果是 AGBFHLCEIKDJ 字符串。 算法原理 我们举例输入的是 ABCDEFGHIJKMNOP 这段字符串我们输出的字符串就是从第一行第一列遍历到最后一行最后一列。
先处理第一行和最后一行
我们从第一行分析我们看到 AGM之间的距离 A和G之间的距离是6G与M之间的距离是6我们就可以看到对于第一行来说我们只需要循环从0开始每次6就给新字符串更新结果。6是相当于公差d66是怎么来的呢 我们的公差6其实相当于将F向左移一列然后俩列一共是8个元素然后减去2个空格就是公差了那么我们就衍生一个公式 公差d2n-2 n代表行数举一个例子当然是不能足以证明结果我们给n设定3行我们看看第一行公差是不是d2*3-24. 我们看到d2n-2n等于3的时候d4公差是4确实验证了我们的猜想。所以第一行每个元素的相差的距离是2n-2的距离n代表行数 string ret;//定义个最终字符串结果int d2*numRows-2,ns.size();//公差为2n-2,n代表原字符串的长度//1.先处理第一行for(int i0;in;id)//每次都加上公差{rets[i];//更新结果} 同样的我们看到最后一行其实和第一行是同样的原理。 //处理最后一行for(int inumRows-1;in;id){rets[i];} 再处理中间行 我们看到BHN绿色线指向的B和H相差6,H和N相差6和第一行和最后一行一样的思路那么我们中间的FL和EK紫色线画的我们看到F和L相差的结果也是6EK相差的结果也是6所以还是再循环的时候加上公差d那么我们如何确定F和E下标的值呢还是和上面一样的我们是如何计算公差的呢移动数据。字符在哪一列我们就看前面列数的总空格数减去空白格即可。 G 前面有3列一共有3*412格 减去 前面列数的空格数6 6 字符G的下标是处在原字符串下标6的位置F 前面有2列一共有2*48格 减去 前面列数的空格数3 5 字符F的下标是处在原字符串下标5的位置 那么F相当于2n-35n等于4三个空格E相当于n-04 (n等于40格空格
我们如何确定F和E的开始值呢
对于第二行 F的下标是5公差是6 相当于6-15
对于第三行 E的下标是4 公差是6 相当于6-24
所以我们进行依次循环处理中间行从k1开始第二行的第二个元素是d-k到k2时第三行的第三个元素是d-k然后当kn-13的时候就结束了因为第四行是最后一行。 for(int k1;knumRows-1;k){for(int ik,jd-k;in||jn;id,jd){if(in)rets[i];if(jn)rets[j];}}
我们是先让i对应的值先更新然后再更新j对应的值条件是in或者jn,因为只要其中一个满足的话我们还是要更新结果。下面要进行判断否则就重复更新了。 实现代码
class Solution {
public:string convert(string s, int numRows) {if(numRows1)return s;string ret;int d2*numRows-2,ns.size();//1.先处理第一行for(int i0;in;id){rets[i];}//2.处理中建行for(int k1;knumRows-1;k){for(int ik,jd-k;in||jn;id,jd){if(in)rets[i];if(jn)rets[j];}}//处理最后一行for(int inumRows-1;in;id){rets[i];}return ret;}
}; 开学坏见面好。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/91419.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!