Leetcode 题解 - 回溯-分割

1. 分割回文串1

  1. Palindrome Partitioning (Medium)

Leetcode / 力扣

  1. # 递归
  2. def partition(self, s: str) -> List[List[str]]:
  3. def backtrack(s, path_tmp):
  4. if not s:
  5. res.append(path_tmp)
  6. return
  7. for i in range(1, len(s) + 1):
  8. if s[:i] == s[:i][::-1]:
  9. backtrack(s[i:], path_tmp + [s[:i]])
  10. res = []
  11. backtrack(s, [])
  12. return res

2. 复原IP地址

  1. Restore IP Addresses (Medium)

Leetcode / 力扣

  1. # 递归
  2. def restoreIpAddresses(self, s: str) -> List[str]:
  3. res = []
  4. n = len(s)
  5. def backtrack(i, tmp, flag):
  6. if i == n and flag == 0:
  7. res.append(tmp[:-1])
  8. return
  9. if flag < 0:
  10. return
  11. for j in range(i, i+3):
  12. if j < n:
  13. if i == j and s[j] == '0':
  14. backtrack(j+1, tmp + s[j] + '.', flag-1)
  15. break
  16. if 0 < int(s[i:j+1]) <= 255:
  17. backtrack(j+1, tmp + s[i:j+1] + '.', flag-1)
  18. backtrack(0, '',4)
  19. return res