Leetcode-006-Z字形变换

本题解决思路是有限状态机FSM,构建排列时有两种状态,要么向上,要么向下,状态间如何切换呢?向上且处于第一行那就该掉头向下了,向下且处于最后一行那就改掉头向上了。思路就是这样。

class Solution {
    public String convert(String s, int numRows) {

        if(s.length()<2||numRows<2) return s;

        List<StringBuilder> demo = new ArrayList<>();

        for(int i=0;i<Math.min(s.length(), numRows);i++){
            demo.add(new StringBuilder());
        }

        int down=1;
        int row=0;

        for(char c:s.toCharArray()){
            demo.get(row).append(c);
            if((row==0&&down==-1)||(row==numRows-1&&down==1)){
                down*=-1;
            }
            if(down==1){
                row++;
            }else{
                row--;
            }
        }

        StringBuilder returnStr = new StringBuilder();

        for(StringBuilder sb:demo){
            returnStr.append(sb);
        }
        return returnStr.toString();


    }
}
class Solution:
    def convert(self, s: str, numRows: int) -> str:
        
        if(numRows<2):
            return s

        demo = [[] for i in range(min(len(s), numRows))]
        down = 1
        row = 0

        for c in s:
            demo[row].append(c)

            if((row==0 and down==-1)or(row==numRows-1 and down==1)):
                down*=-1
            if down==1:
                row+=1
            else:
                row-=1
        result = ''
        for i in demo:
            for j in i:
                result+=j
        return result

猜你喜欢

转载自www.cnblogs.com/huangzengrui/p/12345332.html