問題: git
![]()
方法: 主要思路是DFS,窮舉全部可能的狀況,遞歸全部組合,而後根據IP的規則進行過濾,即每小段只能爲3位,且不大於255,小段數只能爲4,最後輸出符合規則的全部結果。github
具體實現:bash
class RestoreIPAddresses {
fun restoreIpAddresses(s: String): List<String> {
val result = mutableListOf<String>()
if (s.isEmpty() || s.length > 12) {
return result
}
dfs(s, 0, "", result, 0)
return result
}
private fun dfs(s: String, end: Int, ip: String, result: MutableList<String>, count: Int) {
for (start in end..end + 2) {
val ipSegment = s.substring(end..start)
if (ipSegment.length > 1 && ipSegment[0] == '0') {
break
}
if (ipSegment.toInt() > 255) {
break
}
if (start == s.lastIndex) {
if (count == 3) {
result.add("$ip.$ipSegment")
}
break
}
if (ip != "") {
dfs(s, start + 1, "$ip.$ipSegment", result, count+1)
} else {
dfs(s, start + 1, ipSegment, result, count+1)
}
}
}
}
fun main(args: Array<String>) {
val input = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
val restoreIPAddresses = RestoreIPAddresses()
CommonUtils.printArray(restoreIPAddresses.restoreIpAddresses(input).toTypedArray())
}
複製代碼
有問題隨時溝通ui