当前位置: 首页 > article >正文

Z 字形变换(6)

这道题之前一直不会做,明白他是什么意思,但是找不到方法或者方法过于繁琐

方法1:

这是我在力扣评论区看到的方法,太精彩了。

虽然我实现起来效率并不高,可能是我代码的问题,但是他的思路很巧妙。

字符串的规律是假如numRows是4
那1234321234321……
将数字一样的拿出来拼接,最终拼在一起

这是我根据这个思路写的代码,有点丑陋

class Solution {
     public  String convert(String s, int numRows) {
        if(numRows < 2) return s;
        List<StringBuilder>list=new ArrayList<>(numRows);
        char[] array = s.toCharArray();

        for (int i = 0; i < numRows; i++) {
            list.add(new StringBuilder());
        }

        int flag=-1;//1是向下  -1是向上
        int index=0;
        for (int i = 0; i < array.length; i++) {
            char c = array[i];
            StringBuilder sb = list.get(index);
            sb.append(c);



            if(index==0||index==numRows-1){
                //因为index是从0开始的,所以到了numRow-1,不从1开始的原因是list的索引也是从0开始的
                flag=-flag;
            }
            index+=flag;
        }
        StringBuilder result=new StringBuilder();
        for (StringBuilder stringBuilder : list) {
            result.append(stringBuilder.toString());
        }
        return result.toString();

    }
}

方法2:

这个是官方题解,结合他的图也很好理解。特别是他的flag设计得太妙了。
直接使用index+-flag,免去了一次判断

class Solution {
     public  String convert(String s, int numRows) {
        if(numRows < 2) return s;
        List<StringBuilder>list=new ArrayList<>(numRows);
        char[] array = s.toCharArray();

        for (int i = 0; i < numRows; i++) {
            list.add(new StringBuilder());
        }

        int flag=-1;//1是向下  -1是向上
        int index=0;
        for (int i = 0; i < array.length; i++) {
            char c = array[i];
            StringBuilder sb = list.get(index);
            sb.append(c);



            if(index==0||index==numRows-1){
                //因为index是从0开始的,所以到了numRow-1,不从1开始的原因是list的索引也是从0开始的
                flag=-flag;
            }
            index+=flag;
        }
        StringBuilder result=new StringBuilder();
        for (StringBuilder stringBuilder : list) {
            result.append(stringBuilder.toString());
        }
        return result.toString();

    }
}

 


http://www.kler.cn/news/360163.html

相关文章:

  • bug的定义和测试
  • 【功能安全】 独立于环境的安全要素SEooC
  • Unity3D功耗和发热分析与优化详解
  • 如何利用动态IP进行数据采集?
  • AI学习指南深度学习篇-迁移学习的数学原理
  • 【趣学C语言和数据结构100例】
  • skywalking本地测试
  • 从0开始linux(16)——进程(7)进程结束
  • SSM框架实战小项目:打造高效用户管理系统 day2
  • c++初阶--string类(使用)
  • Qt-network (TCP UDP)
  • SSH流量秒变HTTPS —— 筑梦之路
  • Redis底层和缓存雪崩,击穿,穿透
  • 多线程——单例模式
  • 微信小程序/uniapp动态修改tabBar信息及常见报错
  • 全天候风险平价策略下载 | Quantlab AI v0.2:OpenAI的Swarm适配国内大模型(附python代码下载)
  • 多线程实战:从循环打印ABC到单例模式线程池
  • Gooxi打造AI时代算力底座,赋能智慧安防
  • 自由学习记录(12)
  • Json-Rpc框架(项目设计 —— 服务端模块功能详细介绍)