每天都要LeetCode~ Day 6

it2024-01-26  65

ZigZag Convertion

今天的题目是将一个zigzag 的string以横向输出的方式返回~

这道题有点复杂,function中输入一个String和zigzag行数,以String的zigzag排列的横向值输出。 我的思路是先将输入排成zigzag的样子,然后再将横向的值输出。

首先把输入的string转成char array,方便取出char,然后设置第一个条件:如果zigzag的行数小于等于1,那么当前string就不需要通过算法,直接return就行。接着先设置一个StringBuilder,将zigzag行数存进去,(今天才知道StringBuilder比StringBuffer快,但是线程不太安全)。将StringBuilder里的元件都创建好。

现在就可以开始设计算法了,先设置zigzagIndex为0,作为代表我遍历时zigzag的当前位置,然后设置step为1,因为刚开始zigzag是往下走的,即每次加1。设置一个forloop,为代表输入的char array中的每个character,设StringBuilder里在第zigzagIndex位置的值为相对应的character,如果zigzagIndex等于0了(即马上要向下移动),就将step设为1,如果要等于zigzag行数-1了(即马上要向上移动),就将step设为-1。然后每有一个character放进StringBuilder里,我都要更新zigzagIndex的值为step+zigzagIndex,跳出循环,用join方法返回就可以跳过其中的空格了。

代码:

class Solution { public String convert(String s, int numRows) { char[] c = s.toCharArray(); if (numRows <= 1){ return s; } StringBuilder[] sb = new StringBuilder[numRows]; for (int i = 0; i < numRows; i++) { sb[i] = new StringBuilder(); } int zigzagIndex = 0; int step = 1; for (char character : c){ sb[zigzagIndex].append(character); if(zigzagIndex == 0){ step = 1; } else if (zigzagIndex == numRows - 1){ step = -1; } zigzagIndex += step; } return String.join("",sb); }

这道题leetcode上差评如潮-。-

最新回复(0)