B********t 发帖数: 147 | 1 小弟的代码在此,能通过small的test,但是large时说memory limit exceeded,难道
这题还能in place不成?
class Solution {
public:
string convert(string s, int nRows) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(nRows == 1)
return s;
int circle = 2*nRows - 2;
string ret;
for(int i = 0; i < nRows; i++)
{
int j = i;
while(j < s.size())
{
ret.push_back(s[j]);
j += circle;
if(i != 0 && i != nRows - 1)
if((j - i*2) < s.size())
ret.push_back(s[j - i*2]);
}
}
return ret;
}
}; |
d**********x 发帖数: 4083 | 2 大体上没错吧,你不妨先给ret分配好空间,直接赋值进去
或者至少reserve一下。
【在 B********t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 小弟的代码在此,能通过small的test,但是large时说memory limit exceeded,难道 : 这题还能in place不成? : class Solution { : public: : string convert(string s, int nRows) { : // Start typing your C/C++ solution below : // DO NOT write int main() function : if(nRows == 1) : return s; : int circle = 2*nRows - 2;
|
l*****a 发帖数: 14598 | 3 你弄个stringbuilder
然后一列一列append,每列也是个stringbuilder,偶数列头尾没有reverse 之后在插入
总结果
###注意最后一列填满
最后对于总的string.
for(int j=0;j
//这是一行的
for(int i=0;i
str.charAt(i*col+j)
}
【在 B********t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 小弟的代码在此,能通过small的test,但是large时说memory limit exceeded,难道 : 这题还能in place不成? : class Solution { : public: : string convert(string s, int nRows) { : // Start typing your C/C++ solution below : // DO NOT write int main() function : if(nRows == 1) : return s; : int circle = 2*nRows - 2;
|
p****e 发帖数: 3548 | 4 string convert(string s, int nRows) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(nRows <= 1) return s;
int size = s.length();
if(size <=nRows) return s;
int direction = 1;
int row = 0;
int period = 2*nRows-2;
string * ret = new string[nRows];
for(int i = 0; i < size; i++)
{
ret[row].push_back(s[i]);
int modi = i%period;
if(modi == 0)
direction = 1;
else if(modi == nRows-1)
direction = -1;
row += direction;
}
string rlt("");
for(int i = 0; i
rlt += ret[i];
delete [] ret;
return rlt;
} |
l*****a 发帖数: 14598 | 5 rlt += ret[i];
这东西放在循环中,好像效率很差得样子
【在 p****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : string convert(string s, int nRows) { : // Start typing your C/C++ solution below : // DO NOT write int main() function : if(nRows <= 1) return s; : int size = s.length(); : if(size <=nRows) return s; : int direction = 1; : int row = 0; : int period = 2*nRows-2; : string * ret = new string[nRows];
|
p****e 发帖数: 3548 | 6 可能用append好点
(刚开始看成是要做W形,就做成这样了)
【在 l*****a 的大作中提到】![](/moin_static193/solenoid/img/up.png) : rlt += ret[i]; : 这东西放在循环中,好像效率很差得样子
|
p****e 发帖数: 3548 | 7 你这个加入
if(nRows<= 1) return s;
就行了
【在 B********t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 小弟的代码在此,能通过small的test,但是large时说memory limit exceeded,难道 : 这题还能in place不成? : class Solution { : public: : string convert(string s, int nRows) { : // Start typing your C/C++ solution below : // DO NOT write int main() function : if(nRows == 1) : return s; : int circle = 2*nRows - 2;
|
B********t 发帖数: 147 | 8 啊!!!! 是的。。。因为 nRows = 1时 死循环了。。多谢啦
【在 p****e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你这个加入 : if(nRows<= 1) return s; : 就行了
|
P*******b 发帖数: 1001 | 9 这道题遇到了我就认栽了
【在 B********t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 小弟的代码在此,能通过small的test,但是large时说memory limit exceeded,难道 : 这题还能in place不成? : class Solution { : public: : string convert(string s, int nRows) { : // Start typing your C/C++ solution below : // DO NOT write int main() function : if(nRows == 1) : return s; : int circle = 2*nRows - 2;
|
l*****a 发帖数: 14598 | 10 why?
看看我的reply.不就是暴力吗?
【在 P*******b 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这道题遇到了我就认栽了
|