• leetcode--Restore IP Addresses


    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)

    This problem can be solved by bfs method

    public class Solution {
        public ArrayList<String> restoreIpAddresses(String s) {
            ArrayList<String> result = new ArrayList<String>();
            int len = s.length();
            if(len >= 4 && len <= 12){
              result = bfs(s);        
            }
            return result;    
        }
    
        public ArrayList<String> bfs(String s){
            ArrayList<String> result = new ArrayList<String>();
            Queue<PairStrings> tempResult = new LinkedList<PairStrings>();
            tempResult.add(new PairStrings("", s));
            for(int i = 0; i < 4; ++i){
                Queue<PairStrings> temp = new LinkedList<PairStrings>();
                while(tempResult.peek() != null){
                    PairStrings aPair = tempResult.poll();
                    String aString = aPair.s2;
                    int len = aString.length();
                    if(len > 0){
                        for(int j = 1; j < 4 && j < len + 1; ++j){
                            String subs = aString.substring(0,j);
                            if((len - j <= 3 * ( 3 - i)) && checkValidation(subs)){
                                PairStrings newPair = new PairStrings(aPair.s1 + "." + subs, aString.substring(j, len));
                                temp.add(newPair);
                            }    
                        }
                    }
                }
                tempResult = temp;
            }
            while(tempResult.peek() != null){
                PairStrings finalPairs = tempResult.poll();
                String finalString = finalPairs.s1;
                if(finalString.charAt(0) == '.')
                    result.add(finalString.substring(1, finalString.length()));
            }
            return result;
        }
    
        public boolean checkValidation(String s){
            boolean canAppend = false;
            if(s.length() != 0){
                if(s.charAt(0) == '0')
                    canAppend = (s.equals("0"));
                else{
                    int num = Integer.parseInt(s);
                    canAppend = (num >= 0 && num <= 255);
                }
            }
            return canAppend;
        }
    }
    
    class PairStrings{
        String s1;
        String s2;
        PairStrings(String s1, String s2){
            this.s1 = s1;
            this.s2 = s2;
        }
    }
    

      

     rewrite the above code in a simple way

    public class Solution {
        public List<String> restoreIpAddresses(String s) {
    		int len = s.length();
    		List<String> validIP = new ArrayList<String>();
    		if(len < 4 || len > 12)
    			return validIP;
    		dfs(s, "", validIP, 0);
    		return validIP;
    	}
    	
    	private void dfs(String s, String startIp, List<String> validIp, int rounds) {
    		if(rounds == 3 && isValid(s)) // the last round
    			validIp.add(startIp + s);
    		else {
    			for(int i = 1; i < 4 && i < s.length(); ++i) {
    				String current = s.substring(0, i);
    				if(isValid(current))
    					dfs(s.substring(i), startIp + current+".", validIp, rounds + 1);
    			}
    		}
    	}
    	
    	private boolean isValid(String s){
    		if(s.charAt(0) == '0')
    			return s.length() == 1;
    		return s.length() <= 3 && Integer.parseInt(s) <= 255; 
    	}
    }
    

      

  • 相关阅读:
    Eclipse复制或修改项目后,把项目部署后发现还是原来的项目名称
    eclipse设置新建jsp文件默认字符编码为utf-8
    mysql数据库无法插入中文字符
    Dos中查看mysql数据时 中文乱码
    spring 解决中文乱码问题
    mysql再次安装问题
    The import javax.servlet cannot be resolved
    eclipse快捷键补全
    eclipse自动补全
    hibernate运行常见错误
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3617073.html
Copyright © 2020-2023  润新知