2014年5月13日星期二

Loop Solution - ZigZag Conversion ??

public class Solution {
    public String convert(String s, int nRows) {
        if(nRows < 0 || s == null){
            return null;
        }
        if(s.length() == 0 || s.length() == 1 || nRows == 1 || s.length() <= nRows){
            return s;
        }
        int process = 2 * nRows - 2;
        int numOfColumns = (s.length() / process) * (nRows - 1);
        if(s.length() % process != 0){
            if(s.length() % process > nRows){
                numOfColumns = numOfColumns + ((s.length() % process) - nRows) + 1;
            }else{
                numOfColumns = numOfColumns + 1;
            }
        }
        char[][] result = new char[nRows][numOfColumns];
        int loop = 0;
        while(loop < s.length()){
            int curColumn = (loop / process) * (nRows - 1);
            if(loop % process > nRows - 1){
                curColumn = curColumn + ((loop % process) - (nRows - 1));
                int curRow = nRows - ((loop % process) - (nRows - 1)) - 1;
                result[curRow][curColumn] = s.charAt(loop);
            }else{
                result[loop % process][curColumn] = s.charAt(loop);
            }
            loop++;
        }
        StringBuilder resultString = new StringBuilder();
        for(int i = 0; i < nRows; i++){
            for(int j = 0; j < numOfColumns; j++){
                if(result[i][j] != '\u0000'){
                    resultString.append(result[i][j]);  
                }
            }
        }
        return resultString.toString();
    }
}

没有评论: