솜이의 데브로그

[LeetCode] Zigzag Conversion (java) 본문

Algorithm/LeetCode

[LeetCode] Zigzag Conversion (java)

somsoming 2022. 4. 7. 01:16

https://leetcode.com/problems/zigzag-conversion/

 

Zigzag Conversion - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

문제

풀이

 

StringBuilder의 배열을 생성하고, 각 배열마다 numRows의 수만큼 내려가고, 대각선 수 즉 numRows-2 만큼씩 이동하면서 StringBuilder배열에 character를 넣어준다.

그렇게 순차적으로 읽어가면서 넣어주고 마지막에 StringBuilder를 모두 합쳐서 출력한다.

 

코드

class Solution {
    public String convert(String s, int numRows) {
        if(numRows <= 1) return s;
        char[] c = s.toCharArray();
        StringBuilder[] sb = new StringBuilder[numRows];
        for(int i=0; i<sb.length; i++) {
            sb[i] = new StringBuilder("");
        }
        int size = s.length(), idx = 0;
        while(idx < size) {
            int i=0;
            while(i<numRows && i<size && idx<size) {
                sb[i++].append(c[idx++]);
            }
            int j = numRows-2;
            while(j>=1 && j<size && idx<size) {
                sb[j--].append(c[idx++]);                
            }
        }
        
        for(int i=1; i<sb.length; i++) {
            sb[0].append(sb[i]);
        }
        
        return sb[0].toString();
    }
}

 

Runtime: 13 ms, faster than 58.27% of Java online submissions for Zigzag Conversion.
Memory Usage: 48.7 MB, less than 58.27% of Java online submissions for Zigzag Conversion.

 

 

기억할 것

  • StringBuilder[] sb = new StringBuilder[numRows];
  • StringBuilder sb = new StringBuilder("");  스트링빌더 새로 생성하여 선언시 사용
  • sb[0].append(sb[i]) -> StringBuilder에 문자열 append 가능
  • StringBuilder를 String형태로 반환할 때는 return sb[0].toString();

 

'Algorithm > LeetCode' 카테고리의 다른 글

[LeetCode] Remove Element (java)  (0) 2022.04.08
[LeetCode] Two Sum (Java)  (0) 2022.04.07
[LeetCode] Roman to Integer (java)  (0) 2022.04.06