Z字形变换 - LeetCode
2018-05-27 23:41
253 查看
题目: 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数: P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR" 实现一个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 示例 1: 输入: s = "PAYPALISHIRING", numRows = 3 输出: "PAHNAPLSIIGYIR" 示例 2: 输入: s = "PAYPALISHIRING", numRows = 4 输出: "PINALSIGYAHRPI" 解释: P I N A L S I G Y A H R P I
解题思路: 找规律: 1. 字符串自上向下排列,排到numRows再返回向上排列,我们认为它为一个单圈,它的字符串的数量是 numRows * 2 - 2 2. 按行取值,首行与末行每圈取1个,其它行每圈到2个,相应索引值可自行计算。
我的模拟: 1 9 17 2 8 10 16 18 3 7 11 15 4 6 12 14 5 13 答案:
/** * @param {string} s * @param {number} numRows * @return {string} */ let s = "PAYPALISHIRING", numRows = 2; let convert = function (s, numRows) { let len = s.length; // 字符数量 if (len < 3 || numRows == 1) return s; let group = numRows * 2 - 2; // 单圈数量 let quan = Math.ceil(len / group); // 共几大循环(一下一上) let str = ""; for (let i = 0; i < numRows; i++) { for (let j = 0; j < quan; j++) { if (i == 0) { if (s[group * j] != undefined) str = str + s[group * j]; } else if (i == numRows - 1) { if (s[group * j + numRows - 1] != undefined) str = str + s[group * j + numRows - 1]; } else { if (s[group * j + i] != undefined) str = str + s[group * j + i]; if (s[group * (j + 1) - i] != undefined) str = str + s[group * (j + 1) - i]; } } } return str; }; convert(s, numRows);
阅读更多
相关文章推荐
- 【LeetCode】之字形变换
- LeetCode | 6. ZigZag Conversion(之字形变换)
- Leetcode 127. Word Ladder 字符变换 解题报告
- [LeetCode] 103. Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历
- leetcode解题之127. Word Ladder Java版 (单词等长变换)
- LeetCode-Z字形转换
- 算法中可以使用不等式变换避免溢出,leetcode:Sqrt(x) ,BigInteger处理溢出
- [LeetCode]103. Binary Tree Zigzag Level Order Traversal--二叉树之字形遍历
- leetcode【第七周】Z字形排序字符串
- [LeetCode] Edit Distance 字符串变换为另一字符串动态规划
- 【LeetCode】72. Edit Distance单词变换的最少操作
- 【LeetCode笔记】Binary Tree Zigzag Level Order Traversal 二叉树Z字形遍历
- LeetCode ZigZag Conversion 打印之字形字符图案 带打印程序
- [LeetCode] Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历
- LeetCode Word Ladder 找单词变换梯
- LeetCode 103. Binary Tree Zigzag Level Order Traversal(二叉树之字形遍历)
- LeetCode 281. Zigzag Iterator(之字形迭代器)
- leetCode 103.Binary Tree Zigzag Level Order Traversal (二叉树Z字形水平序) 解题思路和方法
- [LeetCode] Sort Transformed Array 变换数组排序
- [LeetCode] Zigzag Iterator 之字形迭代器