0ms 100% Time and 100% Space. 3 Solutions given
Approach\nSome explain for tricks\n1. This judgement is the most important thing, otherwise you waste a lot of time and space. Maybe they are using single line 
# Approach\nSome explain for tricks\n1. This judgement is the most important thing, otherwise you waste a lot of time and space. Maybe they are using single line long inputs to test.\n```\nif rows == 1:\n    return encodedText\n```\n\n2. INPUT is divided, as those sections\n111112333\n011111233\n001111123\n000111112\n000011111+  <-- Add a space here\nIn tests, I find there will be nothing in section-3. The judgement for section-3 is not needed.\nThe actual content are only in section-1 and section-2. So by adding one space char at the end, you can extract all lines as a nice matrix without writing judgement. \nThe space will be removed by rstrip() at the end.\n\n2. Solutions, the performance are similar\nlooping 1\n```\nres = []\nloop:\n    res.append(x) \n```\nlooping 2\n```\nres = \'\'\nloop:\n    res += x\n```\nzip \n```\nans = "".join(["".join(x) for x in zip(*matrix )])\n```\nlist[::], the most elegent one, for this solution you don\'t need trick2 because list[::] will not go the exceed index\n```\nans = "".join([encodedText[i::L+1] for i in range(L_1)])\n```\n# Code\n```python3 []\nclass Solution:\n    def decodeCiphertext(self, encodedText: str, rows: int) -> str:\n        L = len(encodedText)//rows\n        L_1 = L - rows + 2 # actual content length\n        if rows == 1: return encodedText # important\n        # the above are the same\n        \n        # by list[::]\n        ans = "".join([encodedText[i::L+1] for i in range(L_1)])\n        return ans.rstrip()\n\n        # by zip()\n        # encodedText += \' \' # explained as above\n        # matrix = [encodedText[i*L+i: i*L+i+L_1] for i in range(rows)]\n        # ans = "".join(["".join(x) for x in zip(*matrix)])\n        # return ans.rstrip()\n\n        # looping\n        # encodedText+=\' \'\n        # res = ""\n        # # res = []\n        # for pos in range(L_1):\n        #     for i in range(rows):\n        #         x = i*L + i + pos\n        #         res += encodedText[x]\n        #         # res.append(encodedText[x])\n        # return res.rstrip()\n        \n```
['Python3']