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)

s虽然题目说是不用考虑顺序,但是它的测试用例其实是按顺序排列的,所以用了一个Comparator去排序:

import java.util.*;
public class Solution {
    public ArrayList<String> restoreIpAddresses(String s) {
        ArrayList<String> res = new ArrayList<String>();
		ArrayList<String> resa = new ArrayList<String>();
		ArrayList<String> resb = new ArrayList<String>();
		if(s.length()>12)return res;
		for (int i = 2; i < s.length()-1; i++) {
			boolean vailda = false;
			boolean vaildb = false;
			String a = s.substring(0,i);
			String b = s.substring(i,s.length());
			for (int j = 1; j < a.length(); j++) {
				String A = a.substring(0, j);
				String B = a.substring(j, a.length());
		
				String inta = String.valueOf(Integer.parseInt(A));
				String intb = String.valueOf(Integer.parseInt(B));
				if(inta.length()==A.length()&&intb.length()==B.length()) {
					if(Integer.parseInt(A)<=255&&Integer.parseInt(B)<=255) {
						String n = A+'.'+B+'.';
						resa.add(n);
						vailda = true;
					}
				}
			}
			
			for (int j = 1; j < b.length(); j++) {
				String A = b.substring(0, j);
				String B = b.substring(j, b.length());
				String inta = String.valueOf(Integer.parseInt(A));
				String intb = String.valueOf(Integer.parseInt(B));
				if(inta.length()==A.length()&&intb.length()==B.length()) {
					if(Integer.parseInt(A)<=255&&Integer.parseInt(B)<=255) {
						String n = A+'.'+B;
						resb.add(n);
						vaildb = true;
					}
				}
			}
			
			if(vailda&&vaildb) {
				for (String c : resa) {
					for (String v : resb) {
						if(!res.contains(c+v))
						res.add(c+v);
					}
				}
			}
			resa.clear();
			resb.clear();
		}
        
        //对res进行排序
		Collections.sort(res,new Comparator<String>() {
			//当该方法返回正数时,以第一个参数大于第二个,反之亦然
			@Override
			public int compare(String o1, String o2) {
				String[] split1 = o1.split("\\.");
				String[] split2 = o2.split("\\.");
				if(Integer.parseInt(split1[0])!=Integer.parseInt(split2[0]))return Integer.parseInt(split1[0])-Integer.parseInt(split2[0]);
				else if(Integer.parseInt(split1[1])!=Integer.parseInt(split2[1]))return Integer.parseInt(split1[1])-Integer.parseInt(split2[1]);
				else if(Integer.parseInt(split1[2])!=Integer.parseInt(split2[2]))return Integer.parseInt(split1[2])-Integer.parseInt(split2[2]);
				else if(Integer.parseInt(split1[3])!=Integer.parseInt(split2[3]))return Integer.parseInt(split1[3])-Integer.parseInt(split2[3]);
				return 0;
			}
		});
		return res;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值