r****7 发帖数: 2282 | 1 有类似nth permutation的数学解法么?还是说必须要从头开始推? |
w*****t 发帖数: 485 | |
a***e 发帖数: 413 | 3 我把我前后写过的代码贴一下,看有没有大牛有更好的分享下。看soulmachine的答案
看得头大,因为平时不怎么用那些STL。
而且这道题我半年前几下写好了,最近反而花了好久才写对,真是很郁闷。
class Solution {
public:
string countAndSay(int n) {
if (n==0) return "";
string res="1";
if(n==1) return res;
int c;
for (int i=2; i<=n; i++)
{
char num=res[0];
string prev;
int j=0;
while ( j
{
c=0;
while (res[j]==num&&j
{
c++;
j++;
}
prev=prev+to_string(c)+num;
num=res[j];
}
res=prev;
}
return res;
}
};
5个多月前写的。
class Solution {
public:
string countAndSay(int n) {
string previous;
if (n==0)
return previous;
previous = "1";
if (n==1)
return previous;
string cur;
for (int i=1;i
{
int j=previous.size();
for (int k=0;k
{
int c=1;
if (k+1
{
while(previous[k]==previous[k+1]&&k+1
{
c++;
k++;
}
}
cur += to_string(c)+previous[k];
}
previous = cur;
cur.clear();
}
return previous;
}
}; |
r****7 发帖数: 2282 | 4 你这三层循环看着真别捏,应该两层循环然后最后再处理一下尾巴就行了
【在 a***e 的大作中提到】 : 我把我前后写过的代码贴一下,看有没有大牛有更好的分享下。看soulmachine的答案 : 看得头大,因为平时不怎么用那些STL。 : 而且这道题我半年前几下写好了,最近反而花了好久才写对,真是很郁闷。 : class Solution { : public: : string countAndSay(int n) { : if (n==0) return ""; : string res="1"; : if(n==1) return res; : int c;
|
r****7 发帖数: 2282 | 5 这玩意原来还有一个专门的数学问题!
【在 w*****t 的大作中提到】 : 貌似还没有这种解法 : wiki上有其它的推论和公式 : http://en.wikipedia.org/wiki/Look-and-say_sequence
|
w*****t 发帖数: 485 | 6 我这有个简单点的供参考:
class Solution {
public:
string countAndSay(int n) {
string ret = "1";
for (; n > 1; --n) {
ostringstream oss;
for (int i = 0, j = 0; i < ret.size(); ) {
for (j = i; j < ret.size() && ret[i] == ret[j]; ++j);
oss << j - i << ret[i];
i = j;
}
ret = oss.str();
}
return ret;
}
}; |
H******i 发帖数: 5 | 7 class Solution:
# @return a string
def countAndSay(self, n):
if n==1:
return '1'
pre=self.countAndSay(n-1)
start=0
next=''
while start
count=0
cur=pre[start]
while start
count+=1
start+=1
next=next+str(count)+cur
return next
|