ZigZag Conversion 问题

          听了前辈的建议开始做leetcode上面的题目,因为自己还不太会编程所以先从easy开始。第一个题目挑上了ZigZag Conversion。

      原题描述是这样的The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P   A   H   N
A P L S I I G
Y   I   R

      因为一开始理解错题目的意思,而且举得例子在我看来有点特殊,所以把行时的情况理解成了下面这样。 

A         G  
B    E    H      K
C    F     I        L
D         J  

        做了比较繁琐的编程之后(一开始是推导每个字符从横向改为这种形状后会出现的位置关系公式,然后进行数组和字符串操作,相对繁琐)。上传编译时发现网站测试说我的结果有错,我才真正理解题目的意思。原来ZigZag指的是这种情况,

A               G             M

B          F   H        L

C    E        I      K

D               J

        然后在搜索资料时看到了一种很不错的思想。自己理解并转化为JAVA代码后如下

public class Solution {
String convert(String s, int numRows){   
   if(numRows == 1||s.length()==1) return s;     //如果行数或者长度为1,不需要
   String[] res = new String[numRows];      //定义转换后的字符串数组,大小为行数即可,每一行可以添加若干个字符(串)
   for(int i=0;i<numRows;i++){                     //将所有值赋为空字符,否则系统会自动赋值为null,将会影响输出
    res[i]="";
   }
   int i = 0, j, gap = numRows-2;              
   while(i < s.length()){                                                                                                                             //循环主体
       for(j = 0; i < s.length() && j < numRows; ++j){ res[j] += s.substring(i, i+1); i=i+1;}                //控制一列下来从上到下的循环,将原字符串的值自增的付给新数组的每行中
       for(j = gap; i < s.length() && j > 0; --j){ res[j] += s.substring(i, i+1); i=i+1;}                             //控制斜方向的从下向上的循环,将原字符串的值继续增加给每一行
   }
   String str = "";
   for(i = 0; i < numRows; i++)                                                                                                             //返回最后结果
       str += res[i];
   return str;
}

}


       第一道题就感受到了明显的困难和差距,日后之路尚远。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值