Leetcode做题日记:93. 复原IP地址(PYTHON)

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

示例:

输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]

第一次的代码:
所谓正确的ip地址格式,就是X.X.X.X,4段,每一段都得小于255,但不能随便分,因为可能会导致后面的X大于255.
回溯,每次取1-3个字母,判断若小于255,则继续递归,完毕后,pop()换下一个数字,直到3个数字取完,若遇到0,则0只能出现一次,因此,我们只递归一次便break

	def res(s,k,ans,ANS):
            if len(ans)==4 :#列表里有4个就返回,大于4 个的一定不对
                if  k==len(s):
                    ANS.append('.'.join(ans))#将列表转换成字符串
                return
            else:
                for i in range(k+1,min(k+4,len(s)+1)): #这里即选区三个数字,i最
                		#多取到len(S),即[第k个开始:前len(s)个字母]
                    if s[k]=='0' and i>k+1: #遇到0 只能出现一次
                        break
                    a=s[k:i]
                    if int(a) <=255:
                        ans.append(a)
                        res(s,i,ans,ANS)
                        ans.pop() #换下一个数字继续
        ans=[]
        res(s,0,[],ans)                
        return ans

24ms,排名92%

第二次的代码:
我们也可以选择递归

	def res(s,ans,k,ANS):
            if k==4: #列表里有4个就返回,大于4 个的一定不对
                if s=='': #当s被分为4段,成功
                    ANS.append('.'.join(ans))
                return
            for i in range(1,min(4,len(s)+1)):#注意len(s)+1,即i只能取到len(s)
                if int(s[:i])>255 or (s[0]=='0' and i>1):
                    break
                res(s[i:],ans+[s[:i]],k+1,ANS)#修改使用的s切片,继续递归    
        ans=[]
        res(s,[],0,ans)
        return ans

24ms,排名92%

你可能感兴趣的:(leetcode)