[leetcode]6.ZigZag Conversion

这题一上来,直接把我看懵逼了。半天才搞懂zigzag是真的就是按z字型的意思

Solution 1: 暴力解法

把下一次上一次的这种路线当成一个循环体
设置f为direction的标志,f=0表示向下,f=1表示斜着向上
m是存整个路径的矩阵,首先初始化为0

class Solution {
    public String convert(String s, int numRows) {
        
        if(s==null||s.length()<=0) return "";
        
        char []a=s.toCharArray() ;
        int i=0;
        int c=0;
        int f=0;
        int j=0;
        int ml=0;
        
        if(numRows!=1)
          ml=a.length*(numRows-1)/(numRows-1)+numRows-1;
        else
         return s;
        
        char [][]m=new char[numRows][ml];
        for(i=0;i<numRows;i++){
            for(j=0;j<ml;j++){
                m[i][j]='0';
            }
        }
        
        
        i=0;
        while(i<a.length){
            if(f==0){
                j=0;
                while(j<numRows&&i<a.length){ //首先向下,长度是numrows
                    m[j][c]=a[i];
                    i++;
                    j++;
                }
                f=1;//然后转换标志位,接下来向上
            }
            
            if(f==1){
                j--;  //上面哪个while循环退出来后j比最底端的还要大1,所以j-1就到最底端
                j--; // j变成斜向上的第一个的行
                c++;
                
               int k=0;
                for(k=0;k<numRows-2;k++){
                    if(i<a.length&&j>=0){
                    m[j][c]=a[i];  //一直斜着向右上,就是行--,列++
                     
                    j--;
                    c++;
                    }
                   
                    i++;
                    
                    
                }
                f=0;  //一组过后,又开始下一组,所以把direction标志变成向下
            }
            
            
        }
        
        StringBuffer res=new StringBuffer();
        for(i=0;i<numRows;i++){
            for(j=0;j<ml;j++){
                if(m[i][j]!='0'){
                    res.append(m[i][j]);
                }
                
            }
            
        }
        return res.toString();
    }
    
}

猜你喜欢

转载自blog.csdn.net/weixin_36869329/article/details/84098615