题目大意

来自:
https://shenjie1993.gitbooks.io/leetcode-python/093%20Restore%20IP%20Addresses.html
找出一个由纯数字组成的序列能够构成的不同的IP地址。
注意点:
每个IP段的范围是0-255
要用整个序列,而不是它的子集
例子:
输入: s = “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]

解题思路

回溯法DFS

代码

class Solution(object):
    def restoreIpAddresses(self, s):
        """ :type s: str :rtype: List[str] """
        result = []
        self._restoreIpAddresses(0, s, [], result)
        return result

    def _restoreIpAddresses(self, length, s, ips, result):
        if not s:
            if length == 4:
                result.append('.'.join(ips))  # 以.分隔作为字符串返回
            return
        if length == 4:  # 分了4段,结束
            return

        # 取一位
        self._restoreIpAddresses(length + 1, s[1:], ips + [s[:1]], result)

        # 若要取2位及以上,要确保目前的第一位不能为0
        if s[0] != '0':  
            if len(s) >= 2:
                self._restoreIpAddresses(length + 1, s[2:], ips + [s[:2]], result)
            if len(s) >= 3 and int(s[:3]) <= 255: # 若要取3位,则要保证小于255
                self._restoreIpAddresses(length + 1, s[3:], ips + [s[:3]], result)

总结