기울어진 암호문 해독

3182 단어 leetcodetheabbiedsa
문자열originalText은 고정된 수의 행encodedText을 갖는 행렬의 도움으로 문자열rows에 대한 기울어진 전치 암호를 사용하여 인코딩됩니다.
originalText가 왼쪽 위에서 오른쪽 아래로 첫 번째로 배치됩니다.


originalText 끝에 도달할 때까지 파란색 셀이 먼저 채워진 다음 빨간색 셀, 노란색 셀 순으로 채워집니다. 화살표는 셀이 채워지는 순서를 나타냅니다. 모든 빈 셀은 ' ' 로 채워집니다. 열 수는 originalText를 채운 후 가장 오른쪽 열이 비어 있지 않도록 선택됩니다.
encodedText는 행렬의 모든 문자를 행 방향으로 추가하여 형성됩니다.



파란색 셀의 문자가 먼저 encodedText 에 추가된 다음 빨간색 셀에 추가되고 마지막으로 노란색 셀에 추가됩니다. 화살표는 셀이 액세스되는 순서를 나타냅니다.

예를 들어 originalText = "cipher"rows = 3 인 경우 다음과 같은 방식으로 인코딩합니다.



파란색 화살표는 originalText가 매트릭스에 배치되는 방식을 나타내고 빨간색 화살표는 encodedText가 형성되는 순서를 나타냅니다. 위의 예에서 encodedText = "ch ie pr" .

인코딩된 문자열encodedText과 행 수rows가 주어지면 원래 문자열originalText을 반환합니다.

참고: originalText에는 후행 공백이 없습니다' '. 가능한 테스트 사례가 하나만 있도록 테스트 사례가 생성됩니다originalText.

예 1:

입력: encodingText = "ch ie pr", 행 = 3
출력: "암호"
설명: 이것은 문제 설명에 설명된 것과 동일한 예입니다.

예 2:



입력: encodingText = "iveo eed l te olc", 행 = 4
출력: "나는 leetcode를 사랑합니다"
설명: 위 그림은 originalText를 인코딩하는 데 사용된 행렬을 나타냅니다.
파란색 화살표는 어떻게 encodingText에서 originalText를 찾을 수 있는지 보여줍니다.

예 3:



입력: encodingText = "코딩", 행 = 1
출력: "코딩"
설명: 행이 1개뿐이므로 originalText와 encodingText는 모두 동일합니다.

제약:
  • 0 <= encodedText.length <= 106
  • encodedText는 영문 소문자와 ' '로만 구성됩니다.
  • encodedText는 후행 공백이 없는 일부originalText의 유효한 인코딩입니다.
  • 1 <= rows <= 1000
  • 가능한 테스트 사례가 하나만 있도록 생성됩니다originalText.

  • 해결책:

    class Solution:
        def decodeCiphertext(self, encodedText: str, rows: int) -> str:
            m, n = rows, len(encodedText) // rows
            op = ""
            for i in range(n):
                for j in range(m):
                    if i + j < n:
                        op += encodedText[(n + 1) * j + i]
            return op.rstrip()
    

    좋은 웹페이지 즐겨찾기