1. 程式人生 > >LeetCode 93. Restore IP Addresses 20170705 部分之前做了沒寫的題目

LeetCode 93. Restore IP Addresses 20170705 部分之前做了沒寫的題目

git 如果 str sse 1.3 store 一個 clas 根據

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)

題目大意:給出一串數字組成的字符串,返回所有可能的有效的IP地址組合

解題思路:同樣還是深度優先的辦法。先看看終止條件,先用一個count來保存IP地址有幾段。有效的IP地址總共有四段,所以當count等於4的時候才是有效的,且當count等於4時,該字符串應該已經讀完了,所以還加一個條件是如果s==‘‘,此時添加臨時保存IP地址的字符串到結果集合中。這裏只返回從下標為1開始的字符串是因為根據後面的代碼,會在IP地址的每一段前面加一個點,第一段前面的點應該被省略。下面的dfs循環,每一段IP地址都是小於255的,所以每一段地址有可能是1位、2位、3位數字,因此在每一段地址的時候都分成1、2、3位數字三種情況,且這些數字都要小於255,如果符合條件,則下一個循環中原數組s舍棄掉該段IP地址的數字,在臨時保存IP地址字符串中加一個點和該段的數字。如果碰到當前s的第一位是0,則該段IP地址只可能是0,就不需要再作1、2、3位的循環了,直接跳出循環。

技術分享

class Solution:
  def restoreIpAddresses(self, s):
    """
    :type s: str
    :rtype: List[str]
    """
    def dfs(s, count, List):
      if count == 4:
        if s == ‘‘:
          A.append(List[1:len(List)])
      return
      for i in range(1, 4):
        if i <= len(s):
          if int(s[0:i]) <= 255:
            dfs(s[i:len(s)], count+1, List+‘.‘+s[0:i])
          if s[0] == ‘0‘: break
    A = []
    dfs(s, 0, ‘‘)
    return A

LeetCode 93. Restore IP Addresses 20170705 部分之前做了沒寫的題目