1,自己的,java:
class Solution {
public String convert(String s, int numRows) {
int board,n=numRows;
int l=s.length(),flag=0;
String ss="";
if(n==1)
return s;
for(int i=0;i<n;i++){
board=2*n-2;
board=1;
if(i<l)
ss+=s.charAt(i);
else
break;
while(board-i<l){
if(i!=0&&i!=n-1)
ss+=s.charAt(board-i);
if(board+i<l)
ss+=s.charAt(board+i);
else
break;
board+=2*n-2;
}
}
return ss;
}
}
收获:
1],String对象需要初始化,不然是null就无法使用
2],递推算法时注意极限情况是否成立,比如这里的当n=1时,board就成了0,此时需要另给一个值;
2,官方的C++:
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1) return s;
vector<string> rows(min(numRows, int(s.size())));
int curRow = 0;
bool goingDown = false;
for (char c : s) {
rows[curRow] += c;
if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;
curRow += goingDown ? 1 : -1;
}
string ret;
for (string row : rows) ret += row;
return ret;
}
};
学习点:1】,bool的用法;
2】,string的用法以及不用初始化;
3】,集合和字符串以及数组的访问方法;
4】ret字符串加了之后'\0'去哪了??这个需要注意。
3,官方java解法:
class Solution {
public String convert(String s, int numRows) {
if (numRows == 1) return s;
List<StringBuilder> rows = new ArrayList<>();
for (int i = 0; i < Math.min(numRows, s.length()); i++)
rows.add(new StringBuilder());
int curRow = 0;
boolean goingDown = false;
for (char c : s.toCharArray()) {
rows.get(curRow).append(c);
if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown;
curRow += goingDown ? 1 : -1;
}
StringBuilder ret = new StringBuilder();
for (StringBuilder row : rows) ret.append(row);
return ret.toString();
}
}
学习点:注意比较java和C++中用来形成多个字符串的不同之处。