找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1818|回复: 0
收起左侧

[米群网刷题小分队] 【LeetCode小分队】【ZigZag Conversion】【刷题第一弹2014】

[复制链接]

11

主题

8

精华

253

积分

高级会员

Rank: 3Rank: 3

积分
253
发表于 10-12-2014 12:51 PM | 显示全部楼层 |阅读模式

亲!马上注册或者登录会查看更多内容!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
leetcode通道:
http://oj.leetcode.com/problems/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   NA P L S I I GY   I   R

And then read line by line: "PAHNAPLSIIGYIR"


Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);

convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".


思路 :很直接的思路,一层一层地扫出来,只要计算好每个char应该存在的位置就没有问题了。

代码:

  1. public String convert(String s, int nRows) {
  2.         if (nRows == 1) return s;
  3.         int perRow = nRows * 2 - 2;
  4.         int len = s.length();
  5.         StringBuffer sb = new StringBuffer();
  6.         for (int row = 0; row < nRows; row++) {
  7.             for (int i = row; i < len; i += perRow) {
  8.                 if (row == 0 || row == nRows - 1) {
  9.                     sb.append(s.charAt(i));
  10.                 } else {
  11.                     sb.append(s.charAt(i));
  12.                     int index = i - 2 * (i % perRow) + perRow;
  13.                     if (index < len) {
  14.                         sb.append(s.charAt(index));
  15.                     }
  16.                 }
  17.             }
  18.         }
  19.         return sb.toString();
  20.     }
复制代码
建议的回复格式:
思路:(必填)
代码:(必填)
复杂度分析:(必填)
细节和陷阱:(选填)
相似题目: (选填)

本帖被以下淘专辑推荐:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表