个人随笔
目录
leetcode(四)、Z 字形变换
2021-06-22 18:37:39

比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”PAHNAPLSIIGYIR”。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入:s = “PAYPALISHIRING”, numRows = 3
输出:”PAHNAPLSIIGYIR”
示例 2:
输入:s = “PAYPALISHIRING”, numRows = 4
输出:”PINALSIGYAHRPI”
解释:
P I N
A L S I G
Y A H R
P I
示例 3:

输入:s = “A”, numRows = 1
输出:”A”

提示:

1 <= s.length <= 1000
s 由英文字母(小写和大写)、’,’ 和 ‘.’ 组成
1 <= numRows <= 1000

解题要点

首先得看得懂题目
什么叫做Z变化,其实是一个倒过来的N。如果行数是3,那么倒过来的N的边长度就是3

  1. public class Test6 {
  2. /**
  3. * 首先我们得看懂题目,什么叫做Z变化,其实是一个倒过来的N。如果行数是3,那么倒过来的N的边长度就是3,所以第一种我们用比较
  4. * 潦草的解决方案,有多少行我们就定义多少个数组,当然这里是java所以用list来让他自动扩展,规律就是到了边界就换方向
  5. * @param s执行用时:15 ms, 在所有 Java 提交中击败了25.53%的用户内存消耗:39.3 MB, 在所有 Java 提交中击败了19.89%的用户
  6. * @param numRows
  7. * @return
  8. */
  9. public String convert(String s, int numRows) {
  10. if(numRows==1) {
  11. return s;
  12. }
  13. //1、建立一个List<List>保存所有的list
  14. List<List<String>> listss = new ArrayList<List<String>>();
  15. for(int i=0;i<numRows;i++) {
  16. listss.add(new ArrayList<String>());
  17. }
  18. //2、遍历字符,第一位肯定是在第一个里面的,所以这里从第二位开始遍历起
  19. int num = 0;
  20. int change_num = numRows-1;
  21. listss.get(0).add(s.charAt(0)+"");
  22. int index =1 ;
  23. int flag=0;//自增
  24. for (int i = 1; i < s.length(); i++) {
  25. //每change_num个就换一下方向
  26. num++;
  27. if(num==change_num) {
  28. //换方向,换了后就变为0
  29. num=0;
  30. if(flag==0) {
  31. flag=1;
  32. }else {
  33. flag=0;
  34. }
  35. }
  36. listss.get(index).add(s.charAt(i)+"");
  37. if(flag==0) {
  38. index++;
  39. }else {
  40. index--;
  41. }
  42. }
  43. StringBuffer result=new StringBuffer();
  44. for (List<String> list : listss) {
  45. for (String str : list) {
  46. result.append(str);
  47. }
  48. }
  49. return result.toString();
  50. }
  51. public static void main(String[] args) {
  52. // //按周期来计算
  53. System.out.println(new Test6().convert("AB", 1));
  54. System.out.println(new Test6().convert("PAYPALISHIRING", 4));
  55. }
  56. }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion

以后有空再考虑别的解决方案!

 183

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2