From 8b8b79cb1996dc0de82707a5fa9e56387eab75c7 Mon Sep 17 00:00:00 2001 From: hulei22103-gif Date: Sat, 31 Oct 2026 17:35:16 +0800 Subject: [PATCH] Fix recursion depth failure in string transformation reconstruction --- strings/min_cost_string_conversion.py | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/strings/min_cost_string_conversion.py b/strings/min_cost_string_conversion.py index 9feb68a24d24..64079bb9f068 100644 --- a/strings/min_cost_string_conversion.py +++ b/strings/min_cost_string_conversion.py @@ -102,20 +102,20 @@ def assemble_transformation(ops: list[list[str]], i: int, j: int) -> list[str]: >>> assemble_transformation(ops2, x2, y2) ['C1', 'I2', 'R23'] """ - if i == 0 and j == 0: - return [] - elif ops[i][j][0] in {"C", "R"}: - seq = assemble_transformation(ops, i - 1, j - 1) - seq.append(ops[i][j]) - return seq - elif ops[i][j][0] == "D": - seq = assemble_transformation(ops, i - 1, j) - seq.append(ops[i][j]) - return seq - else: - seq = assemble_transformation(ops, i, j - 1) - seq.append(ops[i][j]) - return seq + sequence = [] + # Trace backwards without consuming one Python stack frame per operation. + while i != 0 or j != 0: + operation = ops[i][j] + sequence.append(operation) + if operation[0] in {"C", "R"}: + i -= 1 + j -= 1 + elif operation[0] == "D": + i -= 1 + else: + j -= 1 + sequence.reverse() + return sequence if __name__ == "__main__":