leetcode 6.Z字形变换

原题如下:

在这里插入图片描述

分析

这个题实际上就是把单词里面的字符一个个地拿出来,从第一行摆到第numRows行,之后又一个一个往前一行摆,直到摆到第一行,再次向后面的行一行一行摆,直到单词里面的字符被依次用完为止

方法一

按照分析里面的规律,题目里面如规定只摆一行,那么字符顺序没有变化,这一点很好理解;如果行数大于1了,基本的方法,就是建立一系列共numRows个动态数组用于盛放每一行里面的应有的字符。首先从给定的字符串里面依次拿出字符,从系列的动态数组里面的第一个开始放,放完一个了,再取到第二个字符的时候,放到下一个动态数组里……倘若某个字符放到了编号最大的动态数组,那么下一个字符就要返回往编号小的动态数组里面放,直到放到第一个,再返回放置,一直到取完字符串里面的字符为止

本方法的代码:

/*
 *作者@v7fgg
 *执行用时 :23 ms, 在所有 Java 提交中击败了18.11%的用户
 *内存消耗 :40.3 MB, 在所有 Java 提交中击败了8.33%的用户
 *2020年6月1日 11:37
 */
class Solution {
    public String convert(String s, int numRows) {
        if(numRows==1||s.length()==0){
            //这时不用进行z变换,格式化输出就行
            return s;
        }
        List<List<Character>> list=new ArrayList<>();
        String ans="";
        for(int j=0;j<numRows;j++){
            List<Character> lis=new ArrayList<>();
            list.add(lis);
        }
        int pow=-1;//用于变换到下一个字符插入的list号
        int listNo=0;//list号的变量
        for(int i=0;i<s.length();i++){
            list.get(listNo).add(s.charAt(i));
            if(listNo==0||listNo==numRows-1){
                pow=-pow;
                //从0~numRows-1~0循环插入字符,对应的过程是list号加1或者减1,遇到0,下一个插入字符的list号加1,遇到numRows-1,下一个字符插入的list号减1
            }
            listNo+=pow;
        }
        for(List<Character> l:list){
            for(char c:l){
                ans+=c;
            }
        }
        return ans;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱抱抱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值