LeetCode之Restore IP Addresses(Kotlin)

问题:



方法:
主要思路是DFS,穷举所有可能的情况,递归所有组合,然后根据IP的规则进行过滤,即每小段只能为3位,且不大于255,小段数只能为4,最后输出符合规则的所有结果。

具体实现:

class RestoreIPAddresses {
    fun restoreIpAddresses(s: String): List {
        val result = mutableListOf()
        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, 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) {
    val input = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
    val restoreIPAddresses = RestoreIPAddresses()
    CommonUtils.printArray(restoreIPAddresses.restoreIpAddresses(input).toTypedArray())
}

有问题随时沟通

具体代码实现可以参考Github

你可能感兴趣的:(LeetCode之Restore IP Addresses(Kotlin))