转载出处不记得了,因为是前几天网上找到的代码,在VS里面运行过,今天重新翻出来学习。刚才试着搜索了一下,没找到原始链接。感谢原创者。
public string CountAndSay(int n)
{
if (n <= 0)
{
return string.Empty;
}
if (n == 1)
{
return "1";
}
n = n - 1;
var result = "1";
for (var i = 0; i < n; i++)
{
var r = string.Empty;
var len = result.Length;
var count = 1;
for (var j = 1; j < len + 1; j++)
{
if (j < len && result[j] == result[j - 1])
{
count++;
}
else
{
r += string.Format("{0}{1}", count, result[j - 1]);
count = 1;
}
}
result = r;
}
return result;
}
Soulution 2:http://www.cnblogs.com/etcow/archive/2012/08/29/2661290.html
Soulution 3:https://segmentfault.com/a/1190000003849544
Soulution 4:根据3的方法微量调整
public class Solution {
public string CountAndSay(int n) {
if(n<=0) return "";
if(n==1) return "1";
string s=CountAndSay(n-1);
char last=s[0];
int cnt=1;
StringBuilder sb=new StringBuilder();;
for(int i=1;i<s.Length;i++)
{
if(s[i]==last)
cnt++;
else
{
sb.Append(cnt);
sb.Append(last);
last=s[i];
cnt=1;
}
}
sb.Append(cnt);
sb.Append(last);
return sb.ToString();
}
}