精华内容
下载资源
问答
  • 现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。 例如: 给出的字符串为"25525522135", 返回[“255.255.22.135”, “255.255.221.35”]. (顺序没有关系) 示例 输入"25525522135...

    题目描述
    现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。
    例如:
    给出的字符串为"25525522135",
    返回[“255.255.22.135”, “255.255.221.35”]. (顺序没有关系)
    示例

    输入"25525522135"
    返回 [“255.255.22.135”,“255.255.221.35”]

    思考
    我们知道IP地址分为四个小段,每一小段都是在0~255这个区间内第一小段不能为0。这个就是合法IP 的规则 根据规则我们就可以来判断如何进行。
    1、字符串长度最多12位 超了直接return;
    2、每一个小段最多是小于等于255。
    3、第一小段不能为0。
    4、从1位到3位一次递归实现 找到合适的Ip 地址。

    import java.util.ArrayList;
    import java.util.List;
    /**
     * 
     *
     * @Title:  Ip.java   
     * @Package com.zhonglian.ctx.consumer.web.learn   
     * @Description:    描述    现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。
     * @author: drj     
     * @date:   2020年11月8日 下午11:08:10   
     * @version V1.0 
     * @Copyright:
     */
    public class Ip {
    
    	public static void main(String[] args) {
    		/**
    		 * /源字符串
    		 */
    		String sourceStr = "25525522135";
    		/**
    		 * 存放目标合法ip
    		 */
    		List<String> targetList = new ArrayList<String>();
    		/**
    		 * 存放临时IP
    		 */
    		StringBuilder b = new StringBuilder();
    		getIp(sourceStr, targetList, 0, 0,b);
    		System.err.println(targetList);
    		targetList.stream().forEach(ip ->{
    			System.err.println("ip:"+ ip + "是否合法:" + ipCheck(ip));
    		});
    	}
    	
    	/*public static void deep(int i) {
    		i++;
    		if(i == 4) {
    			return;
    		}
    		System.err.println("***"+i);
    		deep(i);
    		System.err.println(i);
    		
    	}*/
    	
    	/**
    	 * 
    	 * @Title: ipCheck   
    	 * @Description: TODO(正则判断ip 是否合法)   
    	 * @param: @param text
    	 * @param: @return      
    	 * @return: boolean   
    	 * @author: Drj   
    	 * @throws
    	 */
    	public static boolean ipCheck(String text) {
    	    if (text != null && !text.isEmpty()) {
    	      // 定义正则表达式
    	      String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."+
    	           "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."+
    	           "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."+
    	           "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
    	      // 判断ip地址是否与正则表达式匹配
    	      if (text.matches(regex)) {
    	        // 返回判断信息
    	        return true;
    	      } else {
    	        // 返回判断信息
    	        return false;
    	      }
    	    }
    	    return false;
    	  }
    	
    	/**
    	 * 
    	 * @Title: getIp   
    	 * @Description: TODO递归获取合法IP)   
    	 * @param: @param sourceStr
    	 * @param: @param targetList
    	 * @param: @param startPoint 已经截取的长度
    	 * @param: @param count 段数
    	 * @param: @param b      
    	 * @return: void   
    	 * @author: Drj   
    	 * @throws
    	 */
    	public static void getIp(String sourceStr,List<String> targetList,int startPoint,int count,StringBuilder b) {
    		/**
    		 * 判断剩余长度是否最大允许的长度 
    		 * eg:ip 地址最长除了点 应该是255.255.255.255 12的位的字符串 当超过12位 就可以判断不符合要求
    		 * 在eg: 当你第一位是一位数1.255.255.255 剩余最大是能是9位 所以得出一个公式 
    		 * 目标字符串的长度 - 使用的长度 > 3* (4- 节数) 其实3 的意思每节最多是3位 一个合法ip 固定4节
    		 * 超了没必要 继续递归 直接return
    		 */
    		if ((sourceStr.length() - startPoint) > (3 * (4 - count))) {
    			return;
    		}
    		/**
    		 *判断剩余长度是否最小允许长度
    		 *eg:由于四段所以至少每位有一个 最少有4位数字 所以 (总长度- 已经截取的长度 )要是小于了( 4 - 已经合成的段数)就没必要再去递归直接return
    		 */
    		if((sourceStr.length() -startPoint) < 4 - count) {
    			return;
    		}
    		/**
    		 * 当段数 超过4 直接返回 因为 iP 最大只有4段
    		 */
    		if(count > 4) {
    			return;
    		}
    		/**
    		 * 当段数等于4的时候 同时 截取长度 等于源字符串长度 说明 字符串都被使用同时也符合合法的段数
    		 * 这时候将该存储组成的ip  做一个是否合法判断。因为我们第一步是一个比较粗的过滤 通过正则过滤是完善的更合法的Ip
    		 */
    		if (startPoint == sourceStr.length() && count == 4) {
    			/**
    			 * b 长度减一目的是截取了最后一位的点(.)字符。
    			 */
    			String ip = b.toString().substring(0, b.length() - 1);
    			/**
    			 * 判断是否合法 合法添加到目标集合
    			 */
    			if(ipCheck(ip)){
    				targetList.add(ip);
    			}
    			return;
    				
    		}
    		StringBuilder t = null;
    		/**
    		 * 当段位数为1的时候
    		 */
    		if(startPoint + 1 <= sourceStr.length()) {
    			t = new StringBuilder(b);
    			String temp = sourceStr.charAt(startPoint) + ".";
    			b.append(temp);
    			getIp(sourceStr,targetList,startPoint+1,count+1,b);
    		}
    		/**
    		 * 当段位数为2的时候
    		 */
    		if(startPoint + 2 <= sourceStr.length()) {
    			b = new StringBuilder(t);
    			b.append(sourceStr.substring(startPoint, startPoint + 2) + "" + '.');
    			getIp(sourceStr, targetList, startPoint + 2, count + 1, b);
    		}
    		/**
    		 * 当段位数为3的时候 同时判断 三位数字不能大于255 超了直接return
    		 */
    		if(startPoint + 3 <= sourceStr.length()) {
    			b  = new StringBuilder(t);
    			String tempThree = sourceStr.substring(startPoint, startPoint + 3);
    			Integer v = Integer.valueOf(tempThree);
    			if(v > 255) {
    				return;
    			}
    			t.append(sourceStr.substring(startPoint, startPoint + 3) + "" + '.');
    			getIp(sourceStr, targetList, startPoint + 3, count + 1, t);
    		}
    	}
    }
    
    展开全文
  • 纯数字字符串转ip地址

    千次阅读 2018-05-15 20:31:40
    Restore IP Addresses一、问题描述 给定一个只包含数字的字符串,通过返回所有可能的有效IP地址组合来恢复它。 【举例】 输入: "25525511135" 输出: ["255.255.11.135", "255.255.111...

    leetcode 93. Restore IP Addresses

    一、问题描述

            给定一个只包含数字的字符串,通过返回所有可能的有效IP地址组合来恢复它。
            【举例】
            输入: "25525511135"

            输出: ["255.255.11.135", "255.255.111.35"]

    二、解题思路

            从头到尾遍历所有可能的ip组合,将组合的ip先暂存到中间数组中---使用深度优先,及时将不符合的组合剪枝,再将合法的ip组合放入最终结果数组。

    三、算法代码

    /*******************************************************
    Author:tmw
    date:2018-5-14
    ********************************************************/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /**
    参数:
    *s    : 源数字字符串
    *ip   :存储临时转的地址
    start :有效ip地址分4段,start为每一段的起始下标
    step  :记录已分出的ip地址段数
    **result :转换成有效ip地址的所有可能情况
    **/
    
    /**将ch字符串追加到str末尾**/
    char* add_one_ch( char* str, char ch )
    {
        int len = strlen(str);
        str[len] = ch;
        str[len+1] = '\0';
        return str;
    }
    int count = 0;/**记录找到有效ip的个数**/
    void Str_2_Ip_dfs( char* s, char* ip, int start, int step, char** result )
    {
        /**当start下标到达s最后一个字符的下一位,说明此种情况下的有效ip地址转换完毕**/
        if( start == strlen(s) && step == 4 )
        {
            ip[strlen(ip)-1] = '\0';
            strcpy(result[count],ip);
            count++;
    
            return;
        }
    
        /**剪枝语句**/
        /**当前组合情况如果导致后面的元素偏多,则及时返回**/
        if( strlen(s)-start > (4-step)*3 ) return;
    
        /**当前组合情况如果导致后面的元素个数不足以最终转换成xxx.xxx.xxx.xxx,则及时返回**/
        if( strlen(s)-start < (4-step) )  return;
    
        int i;
        int sum = 0;
        /**ip地址最多是百位数字**/
        for( i=start; i<start+3; i++ )
        {
            sum = sum*10 + (s[i]-'0');
    
            /**对所有可能进行dfs**/
            if( sum <= 255 )
            {
                /**将当前可能的组合情况存入ip空间中**/
                add_one_ch(ip,s[i]);
                int mark_len = strlen(ip);/**记dfs前的状态**/
                Str_2_Ip_dfs(s,add_one_ch(ip,'.'),i+1,step+1,result);
                ip[mark_len]='\0'; /**状态恢复**/
            }
    
            /**ip地址前缀不能为0,0可以单独成一段,上一个if的前面则0就认为不能成一段**/
            if( sum == 0 ) break;
        }
    
    }
    
    /**
    *s         :源数字字符串
    *returnSize:用于返回找到的有效ip的个数
    **/
    char** restoreIpAddresses(char* s, int* returnSize)
    {
        /**为临时结果ip和最终结果result申请空间,给临时存储空间初始化**/
        char* ip = (char*)malloc(20*sizeof(char));
        memset(ip,0,strlen(ip));
    
        char** result = (char**)malloc(1000*sizeof(char*));
        int i;
        count = 0;
    
        for( i=0; i<1000; i++ )
            result[i] = (char*)malloc(20*sizeof(char));
    
        Str_2_Ip_dfs( s,ip,0,0,result );
        *returnSize = count;
        return result;
    }

    四、执行结果

    leetcode accept


    梦想还是要有的,万一实现了呢~~~~ヾ(◍°∇°◍)ノ゙~~~


    展开全文
  • 给出一个字符串,完全由数字组成,输出在其中输入3个".“可以组成的所有合法的IP地址(例如:67890,可以组成"6.7.8.90”,“67.8.9.0”,“6.7.89.0”) function numIp(str){ for( let i = 1; i < 4 && i...

    给出一个字符串,完全由数字组成,输出在其中输入3个".“可以组成的所有合法的IP地址(例如:67890,可以组成"6.7.8.90”,“67.8.9.0”,“6.7.89.0”)

    function numIp(str){
    	for( let i = 1; i < 4 && i < str.length-2; i++){
    		for( let j = i+1;j < i+4 && j <str.length-1; j++){
    			for (let k = j+1; k < j+4 && k < str.length; k++){
    				if( str.length - k >= 4){
    					continue ;
    				}
    				let a = parseInt(str.substring(0,i));
    				let b = parseInt(str.substring(i,j));
    				let c = parseInt(str.substring(j,k));
    				let d = parseInt(str.substring(k));
    				if(a>255 || b > 255 || c > 255 || d > 255){
    					continue ;
    				} else {
    					console.log(a+'.'+b+'.'+c+'.'+d)
    				}
    			}
    		}
    	}
    	return str
    }
    numIp('67890')
    
    
    展开全文
  • 现在有一个只包含数字的字符串,将该字符串重新存储成IP地址的形式,返回所有可能的情况。 例如:给出的字符串为"25525511135", 返回["255.255.11.135", "255.255.111.35"]. (顺序没有关系) <?php function ...

    现在有一个只包含数字的字符串,将该字符串重新存储成IP地址的形式,返回所有可能的情况。
    例如:给出的字符串为"25525511135", 返回["255.255.11.135", "255.255.111.35"]. (顺序没有关系)

    <?php
    function restoreIpAddresses($s) {
        $length = strlen($s);
        if ($length > 12 || $length < 4) {
            //如果超过12位,小于4位,则不可能分割成ip段
            return ;
        }
        $arrOutput = array();
        for ($i = 1; $i <= 3; $i ++) {
            for ($j = $i + 1; $j <= $i + 3; $j ++) {
                for ($k = $j + 1; $k < $length; $k ++) {
                   if ($j >= $length - 1) {
                       //第二个位置超过了长度,则结束
                       continue;
                   }
                   $sub1 = substr($s, 0, $i);
                   $sub2 = substr($s, $i, $j - $i);
                   $sub3 = substr($s, $j, $k - $j);
                   $sub4 = substr($s, $k, $length - $k);
                   if (intval($sub1) > 255 || intval($sub2) > 255
                       || intval($sub3) > 255 || intval($sub4) > 255) {
                       continue;
                   }
                   $arrOutput[] = "$sub1.$sub2.$sub3.$sub4";
                }
            }
        }
        return $arrOutput;
    }
    $s = '25525511135';
    $s = '25525';
    $ret = restoreIpAddresses($s);
    print_r($ret);

     

    展开全文
  • VC++字符串IP地址转DWORD地址

    千次阅读 多人点赞 2020-11-25 10:37:34
    实现功能:把字符串IP地址转DWORD地址 ,如转换成CIPAddressCtrl 添加的DWORD变量 DWORD m_dwIpaddress; string strIPAddress = "192.168.10.10"; m_dwIpaddress = IP_str2int(strIPAddress.c_str...
  • 字符串转int int转字符串 IP字符串转int int转ip字符串
  • #include int main(int argc,char *argv[]){const char *ip ="192.168.34.232";char *ipstr=NULL;char str_ip_index[4]={'\0'};unsigned int ip_int,ip_add=0,ip_int_index[4],ip_temp_numbr=24;int j =0,a=3;for(un...
  • 字符串IP地址和二进制IP地址的转换

    千次阅读 2017-01-24 10:12:23
    人们理解的IP地址表达方式类似为127.0.0.1,而计算机理解的为一串0x011111110000000…..的表达式。 因此,linux操作系统有一套函数用于网络地址的字符串形式和二进制形式转换 inet_XXX()函数,用于网络地址字符...
  • 字符串ip地址和数值ip转换

    千次阅读 2019-02-22 00:42:54
    #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;arpa/inet.h&gt; //形如"192.168.2.1"转换到数组和主机字节序 ...ip地址合法性 a.4个数字不能大于255...
  • IP地址转字符创函数inet_ntoa很方便,但8266中没有!!!!! 本节将讲述如何自己实现inet_ntoa函数 ip转字符串 ********************************************************************
  • 第一种方法: package prepare;... *32位的IP地址转换成字符串IP地址 */ public class ipaddress01 { public static final String long2Ip(final long ip) { final long[] mask = { 0x000000FF, 0x00...
  • 字符串IP地址转成整数IP地址

    千次阅读 多人点赞 2012-05-12 14:51:01
    unsignedint ConvertFromIP(const char * ipaddr) { unsigned int ipint = 0; char p[32]={0}; strcpy(p, ipaddr); char * c = strchr(p, '.'); char * cc = p; if(c == NULL){ re
  • Golang 字符串ip地址与Long类型互

    千次阅读 2019-04-11 17:18:56
    IP地址字符串的形式存储在数据库是对数据库查询效率方面有些影响的,成数字类型就能提高数据库查询效率,所以催生类IP地址与Long类型转换的需求: package main import ( "encoding/binary" "fmt" "net" )...
  • 检测字符串Ip地址

    2011-10-18 15:53:56
    使用正则表达式检测字符串Ip地址,如果是返回true,否则为false
  • /将字符串IP地址转换为IPAddress变量 string strIP = "192.168.1.107"; IPAddress ipAddress = IPAddress.Parse(strIP); System.Windows.Forms.MessageBox.Show(ipAddress.ToString()); 下面的代码效果一...
  • 字符串IP地址转换成IP数值函数

    千次阅读 2009-09-25 15:11:00
    if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[f_IP2Int]) and xtype in (NFN, NIF, NTF))drop function [dbo].[f_IP2Int]GO-... 字符串IP地址转换成IP数值函数。CREATE FUNCTION dbo.f_IP2In
  • 现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。 例如: 给出的字符串为"25525522135", 返回[“255.255.22.135”, “255.255.221.35”]. (顺序没有关系) 示例1 输入 复制 ...
  • JAVA将字符串表示的ip地址转换为long表示 /** * 将字符串表示的ip地址转换为long表示. * * @param ip ip地址 * @return 以32位整数表示的ip地址 */ public static final long ip2Long(final String ip) {...
  • 怎样将字符串格式的ip地址转换为16进制,即将“200.168.1.1” 转化为 0x0101a8c8
  • 主要给大家介绍了利用Python将IP在整型和字符串之间轻松转换的相关资料,文中还跟大家分享了Python下利用正则表达式来匹配校验一个字符串是否为ip地址的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
  • 字符串-06. IP地址转换

    2019-10-08 01:00:44
    字符串-06. IP地址转换(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码...
  • Java - 判断字符串是否为IP地址

    千次阅读 2020-08-06 12:07:34
    文章目录Java - 判断字符串是否为IP地址1、代码2、CommonUtils 工具类3、NumberUtils 工具类 Java - 判断字符串是否为IP地址 1、代码 主要就是这么几个条件 非空 长度符合 0.0.0.0 - 255.255.255.255 包含分隔符 ...
  • package itheima2; import java.util.Scanner; public class Main { public static void main(String[] args) { ... System.out.print("请输入字符串Ip地址:"); String str = scanner.nextLine(); Syste
  • 数字字符串转化为IP地址 Apare

    千次阅读 2020-09-23 07:48:23
    数字字符串转化为IP地址 牛客链接 <– 题目描述 现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。 例如: 给出的字符串为"25525511135", 返回[“255.255.11.135”, “255.255...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 466,490
精华内容 186,596
关键字:

字符串转IP地址