#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @return string字符串一维数组
#
class Solution:
    def restoreIpAddresses(self , s: str) -> List[str]:
        # write code here
        res=[]
        segements=[]
        slen=len(s)
        def  backtrack(s,start:int ,segements:list ,res:list):
            k=len(segements)
            if k==4 and start==slen:
                #print("add",segements)
                res.append(segements[0]+"."+segements[1]+"."+segements[2]+"."+segements[3])
                return
            # 剪枝
            if k>4 or start>=slen:
                return 
            # # 剪枝   // 剪枝:剩余的字符数必须满足 [4-k, 3*(4-k)] 区间
            # remaing=slen-k #剩余长度
            # # if  remaing<4-k or remaing> 3*(4-k):
            # #     return
            

            # 遍历每段3中情况,即三种长度 : 1, 11,111
            for end in range(1,4):
                
                sub_str=s[start:start+end]
                #print(sub_str)
                #剪枝 有前导0 或者超出255
                
                if (len(sub_str)>1 and sub_str[0]=='0') or int(sub_str)>255:
                    break
            
                segements.append(sub_str)
                backtrack(s,start+end,segements,res)
                segements.pop()
        backtrack(s,0,segements,res)
        return res