LeetCode93 Restore IP Addresses

LeetCode93 Restore IP Addresses

問題來源leetcode93

問題描述

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格式,默認給定的字符串是隻包含數字的,所以就不用考慮裏面的其他字符的問題了。

因爲IP的特殊性,主要是每一部分都是0-255的範圍,也就是每一部分的長度最多爲3,最少爲1。那麼其實就可以考慮使用int類型就行判斷。

因爲IP分爲4個部分,那麼每一個部分作爲一個int,也就是對應一個int數組,數組大小爲4.

對字符串進行遍歷,統計連續字符串的和,當然每添加一位需要對前面的和乘以10.

因爲每位ip最多包含3個字符,所以這裏需要一個循環。如果ip當前位的數字大小在0-255的範圍內,那麼可以認爲滿足要求,進入下一層遞歸,也就是ip位+1,進入數組的下一個元素。如果超出了這個範圍,說明不符合ip的要求,結束遞歸。

具體代碼如下

List<String> res = new ArrayList<>();
public List<String> restoreIpAddresses(String s) {
    if (s == null || s.length() < 4 || s.length() > 12) {
        return res;
    }
    help(s, new int[4], 0, 0);
    return res;
}
private void help(String s,int[] nums,int index,int count){
    if(count==4){
        if(index==s.length()){
            StringBuilder sb =new StringBuilder();
            sb.append(nums[0]);
            for (int i = 1; i <4; i++) {
                sb.append('.');
                sb.append(nums[i]);
            }
            res.add(sb.toString());
        }
            return;
    }
    nums[count]=0;
    for (int i = 0; i < 3; i++) {
        if(index+i<s.length()){
            nums[count]=nums[count]*10+s.charAt(index+i)-'0';
            if(nums[count]<256){
                help(s,nums,index+1+i,count+1);
            }
            if(nums[count]==0&&i==0){
                return;
            }
        }
    }
}

LeetCode學習筆記持續更新

GitHub地址 https://github.com/yanqinghe/leetcode

CSDN博客地址 http://blog.csdn.net/yanqinghe123/article/category/7176678

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章