Leetcode 6. ZigZag Conversion(java版)

本文介绍了一种将字符串以Z字形排列并重新组合的算法实现。通过计算每组Z字形的长度及各元素位置,实现了字符串的正确转换。文章提供了详细的思路解析和Java代码示例。

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

题目 and example:

这里写图片描述

题目大意:

给一个字符串,需要将这个字符串按照“|/|”这样的顺序排列,然后按行再将字符串合并。

思路:

  1. 每一组 V 字形的长度为 size = 2 * line - 2 (斜向上的部分没有第一行和最后一样的元素),line 是行数
  2. 对于垂直向下的一列元素来说,每一组向下的列之间间隔 size 大小,即一组元素的个数。
  3. 对于斜向上的元素来说,它们的位置位于当前组 size - i(i 为该元素所在的行数,一组有 size 个字符,倒数第 i 个,位置为 size - 1)。当前组的第一个字符所在位置为 j - i (j 为与斜向上的元素同在一行的,垂直向下的列的元素在字符串中的序号,i 为它们共同的行号)。
    即:j-i就是zigzag的起始字符,然后我们是要倒数第i个,因为一个zigzag有size个字符,所以倒数第i个就是size-i,我们要赋值的字符就是(j-i)+(size-i)=j+size-2*i

代码:

class Solution {
    public String convert(String s, int numRows) {

        if(s == null || s.length() == 0 || numRows <= 0)
            return "";

        if(numRows == 1 || s.length() == 1) return s;

        StringBuilder ans = new StringBuilder();

        int size = numRows * 2 - 2;

        for(int i = 0 ; i < numRows ; i++) {

            for(int j = i ; j < s.length() ; j += size) {

                ans.append(s.charAt(j));

                if(i != 0 && i != numRows - 1 && j + size - i * 2 < s.length()){
                    ans.append(s.charAt(j + size - i * 2));
                }
            }
        }
        return ans.toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值