leetcode6-ZigZag Conversion

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++中用来形成多个字符串的不同之处。

猜你喜欢

转载自blog.csdn.net/u011776818/article/details/80903432