6. N 字形变换
  30mpxsTv9eii 2023年11月02日 32 0


https://leetcode.cn/problems/zigzag-conversion/description/

思路

找规律:

  • 首尾两行的下标是一个以i为第一个元素,2n-2为公差的等差数列
  • 中间元素的奇数元素是一个以i为第一个元素,2n-2为公差的等差数列
    偶数元素是一个以2n-i-2为第一个元素,2n-2为公差的等差数列

需要注意的是当n为1时,公差2n-2会变为0, 会出现死循环

for (int k = i, j = (2 * n - i - 2); 
     k < s.size() || j < s.size(); 
     k += (2 * n - 2),j += (2 * n - 2))

代码

class Solution {
public:
    string convert(string s, int n) {
        if (n == 1) return s;

        string res;
        
        // i代表行数
        for (int i = 0; i < n; i ++){
            if (i == 0 || i == n - 1){
                for (int k = i; k < s.size(); k += (2 * n - 2)){
                    res += s[k];
                }
            }
            else{
                for (int k = i, j = (2 * n - i - 2); k < s.size() || j < s.size(); k += (2 * n - 2),j += (2 * n - 2)){
                    if (k < s.size()) res += s[k];
                    if (j < s.size()) res += s[j];
                }
            }
        }
        return res;
        
    }
};


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
30mpxsTv9eii