力扣6.Z字形变换

class Solution {
    public String convert(String s, int numRows) {
        int length = s.length(); // 获取字符串的长度
        char[] arr = s.toCharArray(); // 将字符串转换为字符数组
        char[] res = new char[length]; // 创建一个与原字符串长度相同的字符数组,用于存放结果

        if(numRows == 1 || numRows > length) { // 如果行数为1或者大于字符串长度,直接返回原字符串
            return s;
        }

        // 初始化变量
        int index = 0; // 结果数组的索引
        int left = numRows * 2 - 2; // 当前行的左侧间隔
        int right = 0; // 当前行的右侧间隔

        // 遍历每一行
        for (int i = 0; i < numRows; i++, left -= 2, right += 2) {
            res[index++] = arr[i]; // 将当前行的首字符放入结果数组
            // 遍历当前行的字符
            for (int j = i; j < length;) {
                j += left; // 计算下一个字符的位置
                if (left != 0 && j < length) { // 如果位置合法,将字符放入结果数组
                    res[index++] = arr[j];
                }
                j += right; // 计算下一个字符的位置
                if (right != 0 && j < length) { // 如果位置合法,将字符放入结果数组
                    res[index++] = arr[j];
                }
            }
        }
        return String.valueOf(res); // 将字符数组转换为字符串并返回
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值