public class Solution { public string CountAndSay(int n) { if (n == 1) return "1"; return RLE(CountAndSay(n - 1)); } public string CountAndSayIterative(int n) { string result = "1"; for (int i = 2; i <= n; i++) { result = RLE(result); } return result; } public string RLE(string s) { int count = 1; //not needed as last flush handles this //if (s.Length == 1) return count.ToString() + s; var sb = new StringBuilder(); for (int i = 0; i < s.Length - 1; i++) { if(s[i] != s[i + 1]){ sb.Append(count); sb.Append(s[i]); count = 1; } else { count++; } } // flush the last run sb.Append(count); sb.Append(s[s.Length - 1]); return sb.ToString(); }}