Restore IP Address Leetcode Python

Given a string containing only digits, restore it by returning all possible valid IP address combinations.

For example:
Given "25525511135",

return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

这道题目解法与求subarray一样,但并非NP问题。解法是定义一个递归,在递归里面循环递归四次即可。判断可行条件,IP每个段的值小于等于255 并且数值前面没有0,比如025 为错误的。解法是s==str(int(s)) 如果有0两者不等。

This problem can be categorized as finding sub array from a big array. But here is a minor difference between this problem and the subset problem, we just need to traverse 4 times because IP has 4 parts split by 3 dots. Another import thing we need to know is that for every part of the IP, we need to make sure the value is no greater than 255 and there is no 0 in front it,ex 025 is not valid. This can be solved by using s==str(int(s)).

The code is as follow

class Solution:
    # @param s, a string
    # @return a list of strings
    def getIP(self,valuelist,solution,s,start):
        if start==3:
            if len(s)>0:
                if int(s)<=255 and s==str(int(s)):
                    solution.append(valuelist+s)
            return
        for index in range(1,4):
            if index<len(s) and int(s[:index])<=255 and s[:index]==str(int(s[:index])):
                self.getIP(valuelist+s[:index]+'.',solution,s[index:],start+1)
            
    def restoreIpAddresses(self, s):
        solution=[]
        self.getIP('',solution,s,0)
        return solution

  

你可能感兴趣的:(LeetCode,python,recursion,NP,Subarray)