https://leetcode.com/problems/count-and-say/
코드설명
깊이우선탐색(DFS)을 활용합니다.
문제에 주어진대로 점화식을 세워서 해결하면 됩니다.
코드
정답코드1입니다.
class Solution { public String countAndSay(int n) { return DFS(n); } String DFS(int n){ if(n == 1) return "1"; StringBuilder ret = new StringBuilder(); String A = DFS(n - 1); for(int i=0; i<A.length(); i++){ int repeatCnt = 1; while(i + 1 < A.length() && A.charAt(i) == A.charAt(i + 1) ){ repeatCnt += 1; i += 1; } ret.append(repeatCnt).append(String.valueOf(A.charAt(i))); } return ret.toString(); } }
정답코드2입니다. 처음에 작성한 코드입니다. 불필요한 변수가 많습니다.
class Solution { public String countAndSay(int n) { return DFS(n); } String DFS(int n){ if(n == 1) return "1"; StringBuilder ret = new StringBuilder(); String A = DFS(n - 1); for(int i=0; i<A.length(); i++){ int repeatCnt = 1; int idx = i; while(idx + 1 < A.length() && A.charAt(idx) == A.charAt(idx + 1) ){ repeatCnt += 1; idx += 1; } ret.append(repeatCnt).append(String.valueOf(A.charAt(idx))); i = idx; } return ret.toString(); } }