ZigZag Conversion

本文介绍了一种将字符串按倒‘之’字形排列并逐行读取的算法实现。通过C++代码示例,展示了如何针对不同行数进行字符串转换的方法。

题目

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P   A   H   N
A P L S I I G
Y   I   R
And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);
convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

分析

此题是一道较为简单的字符串题,将一个字符串按照倒“之”字形写出来,要求输出其一行一行读该字符串的结果。将第一行和最后一行作为一类,中间的行作为一类,通过循环处理即可得答案。

C++代码

class Solution {
public:
    string convert(string s, int numRows) {
        string r = "";
        int n = s.size(), m = 2*numRows-2;
        
        if (!m) return s;
        
        for (int i = 0;i*m < n;i++)
        	r += s[i*m];
        
        for (int i = 1;i < numRows - 1;i++)
        {
        	for (int j = 0;j*m+i < n;j++)
        	{
        		r += s[j*m+i];
        		if ((j+1)*m-i < n)
        			r += s[(j+1)*m-i];
			}
		}
		
		for (int i = 0;i*m + numRows - 1 < n;i++)
        	r += s[i*m + numRows - 1];
    	return r;
    }
};


源码来自:https://pan.quark.cn/s/41b9d28f0d6d 在信息技术领域中,jQuery作为一个广受欢迎的JavaScript框架,显著简化了诸多操作,包括对HTML文档的遍历、事件的管理、动画的设计以及Ajax通信等。 本篇文档将深入阐释如何运用jQuery达成一个图片自动播放的功能,这种效果常用于网站的轮播展示或幻灯片演示,有助于优化用户与页面的互动,使网页呈现更加动态的视觉体验。 为了有效实施这一功能,首先需掌握jQuery的核心操作。 通过$符号作为接口,jQuery能够迅速选取DOM组件,例如$("#id")用于选取具有特定ID的元素,而$(".class")则能选取所有应用了某类class的元素。 在选定元素之后,可以执行多种行为,诸如事件监听、样式的变更、内容的更新以及动画的制作等。 关于“一个基于jQuery的图片自动播放功能”,首要任务是准备一组图片素材,这些素材将被整合至一个容器元素之中。 例如,可以构建一个div元素,将其宽度设定为单张图片的尺寸,再借助CSS实现溢出内容的隐藏,从而构建出水平滚动的初始框架。 ```html<div id="slider"> <img src="image1.jpg" alt="Image 1"> <img src="image2.jpg" alt="Image 2"> <!-- 更多图片内容... --></div>```接着,需要编写jQuery脚本以实现图片的自动切换。 这通常涉及到定时器的运用,以设定周期性间隔自动更换当前显示的图片。 通过使用`.fadeOut()`和`.fadeIn()`方法,能够实现图片间的平滑过渡,增强视觉效果。 ```javascript$(document).re...
process.stdin.resume(); process.stdin.setEncoding('utf-8'); let input = ''; process.stdin.on('data', (data) => { input += data; }); process.stdin.on('end', () => { let inputArray = input.split('\n'); /** * 待实现函数,在此函数中填入答题代码 * doFunc() */ process.exit(); }); // N字形变换 process.stdin.resume(); process.stdin.setEncoding('utf-8'); let input = ''; process.stdin.on('data', (data) => { input += data; }); process.stdin.on('end', () => { let inputArray = input.trim().split('\n'); const s = inputArray[0]; const numRows = parseInt(inputArray[1]); const result = zigzagConversion(s, numRows); console.log(result); process.exit(); }); function zigzagConversion(s, numRows) { if (numRows === 1 || numRows >= s.length) { return s; // 如果行数为1或行数大于等于字符串长度,直接返回原字符串 } // 初始化一个数组,用于存储每一行的字符 const rows = new Array(numRows).fill(''); let currentRow = 0; // 当前行号 let goingDown = false; // 是否向下移动 for (let i = 0; i < s.length; i++) { rows[currentRow] += s[i]; // 将当前字符添加到当前行 // 判断是否到达边界,需要折返 if (currentRow === 0 || currentRow === numRows - 1) { goingDown = !goingDown; // 到达边界时,方向反转 } // 根据当前方向更新行号 currentRow += goingDown ? 1 : -1; } // 将所有行的字符拼接成最终结果 return rows.join(''); }代码哪里有问题修改并输出process.stdin.resume(); process.stdin.setEncoding('utf-8'); let input = ''; process.stdin.on('data', (data) => { input += data; }); process.stdin.on('end', () => { let inputArray = input.split('\n'); /** * 待实现函数,在此函数中填入答题代码 * doFunc() */ process.exit(); });这块不用改动
06-09
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值