LeetCode - Z 字型变换

本文详细解析了LeetCode上的Z字型变换问题,通过实例解释了如何将输入字符串按Z字形排列并重新组合,提供了清晰的算法思路及Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode - Z 字型变换

     废话不说,LeetCode地址奉上.

https://leetcode-cn.com/problems/zigzag-conversion/ 中文版不需要翻墙哈!

    这种题型问题不大而且难度也不大,关键在于问题的理解。出题的频率也不高。


     接下来是题目描述:

在这里插入图片描述
在这里插入图片描述

    题目给的比较清楚,但是不太容易理解。这里的关键问题是什么呢,如果我们把每一行都表达出来,然后把所有行合并成一行就成功了。那么现在问题的关键是怎么分割成多行呢?

    看示例2的第一行,L和D之间是有空格的,但是这是为了让你看到Z而不是真实存在的,因为输出结果中没有空格。那么问题就比较清楚了,简单来说就是先从字符串中取字符让如到第一行,然后一直放到和行数相等,然后着从倒数第二行开始放一直放到第一行,直到字符取完。就行了!然后是代码:


StringBuilder[] stringBuilders = new StringBuilder[numRows];

        int i = 0;
        //初始化每一行,每一行用StringBuilder表示
        for (int j = 0; j < stringBuilders.length; j++) {
            stringBuilders[j] = new StringBuilder();
        }
		//字符取完就结束
        while (i < s.length()) {
        //从第一行开始放放字符,idx表示行数因为数组下标从0开始所以idx < numRows
            for (int idx = 0; idx < numRows && i < s.length(); i++) {
                stringBuilders[idx++].append(s.charAt(i));
            }
			//从倒数第二行开始,对应下标是 numRows-2 idx>=是为了不和idx = 0 重复
            for (int idx = numRows - 2; idx >= 1 & i < s.length(); i++) {
                stringBuilders[idx--].append(s.charAt(i));
            }
        }
	//合并成一行
        for (int j = 1; j < stringBuilders.length; j++) {
            stringBuilders[0].append(stringBuilders[j]);
        }
        //返回结果
        return stringBuilders[0].toString();

    如果哪位小伙伴发现不能ac,麻烦评论谢谢,有想法也可以在评论区交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值