LeetCode之Restore IP Addresses(Kotlin)

問題: 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

具體代碼實現能夠參考Githubspa

相關文章
相關標籤/搜索