LeetCode 751. IP 到 CIDR(贪心)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给定一个起始 IP 地址 ip 和一个我们需要包含的 IP 的数量 n,返回用列表(最小可能的长度)表示的 CIDR块的范围。

CIDR 块是包含 IP 的字符串,后接斜杠和固定长度。例如:“123.45.67.89/20”。固定长度 “20” 表示在特定的范围中公共前缀位的长度。

示例 1:
输入:ip = "255.0.0.7", n = 10
输出:["255.0.0.7/32","255.0.0.8/29","255.0.0.16/32"]
解释:
转换为二进制时,初始IP地址如下所示(为清晰起见添加了空格):
255.0.0.7 -> 11111111 00000000 00000000 00000111
地址 "255.0.0.7/32" 表示与给定地址有相同的 32 位前缀的所有地址,
在这里只有这一个地址。地址 "255.0.0.8/29" 表示与给定地址有相同的 29 位前缀的所有地址:
255.0.0.8 -> 11111111 00000000 00000000 00001000
有相同的 29 位前缀的地址如下:
11111111 00000000 00000000 00001000
11111111 00000000 00000000 00001001
11111111 00000000 00000000 00001010
11111111 00000000 00000000 00001011
11111111 00000000 00000000 00001100
11111111 00000000 00000000 00001101
11111111 00000000 00000000 00001110
11111111 00000000 00000000 00001111地址 "255.0.0.16/32" 表示与给定地址有相同的 32 位前缀的所有地址,
这里只有 11111111 00000000 00000000 00010000。总之,答案指定了从 255.0.0.7 开始的 10 个 IP 的范围。有一些其他的表示方法,例如:
["255.0.0.7/32","255.0.0.8/30", "255.0.0.12/30", "255.0.0.16/32"],
但是我们的答案是最短可能的答案。另外请注意以 "255.0.0.7/30" 开始的表示不正确,
因为其包括了 255.0.0.4 = 11111111 00000000 00000000 00000100 这样的地址,
超出了需要表示的范围。注:
ip 是有效的 IPv4 地址。
每一个隐含地址 ip + x (其中 x < n) 都是有效的 IPv4 地址。
n 为整数,范围为 [1, 1000]

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/ip-to-cidr
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 参考大佬的解答,自己用C++写了下,并画图理解
    在这里插入图片描述
class Solution {
public:vector<string> ipToCIDR(string ip, int n) {long init = iptolong(ip);//转化成256进制的4位数vector<string> ans;while(n){int tail0 = tail0count(init);//该数后面有多少个尾0long mask = 0, numofips = 1;while(numofips < n && mask < tail0){	//该数后面都可以容纳多少个 ipnumofips <<= 1;mask++;}if(numofips > n){	//超了,要减回去numofips >>= 1;mask--;}ans.push_back(iptostr(init, 32-mask));n -= numofips;//还剩余多少init += numofips;//ip开始位置更新}return ans;}long iptolong(string& ip){	//ip转256进制数vector<int> num;long n = 0, i;for(i = 0; i < ip.size(); ++i){if(ip[i] == '.'){num.push_back(n);n = 0;}else{n = 10*n+ip[i]-'0';if(i == ip.size()-1)num.push_back(n);}}n = 0;for(i = 0; i < 4; ++i)n = n*256+num[i];return n;}string iptostr(long n, int range){	//ip+rangestring ip;vector<int> num;while(n){num.push_back(n%256);n /= 256;}while(num.size() < 4)num.push_back(0);ip = to_string(num[3])+'.'+to_string(num[2])+'.'+to_string(num[1])+'.'+to_string(num[0])+'/'+to_string(range);return ip;}int tail0count(long n){int count = 0, i = 0;if(n == 0)return 0;while(((n>>i)&1)==0){count++;i++;}return count;}
};

8 ms 7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORA-23616:执行块5失败

解决方案&#xff1a; 1. 查看错误信息 STRMADMning>select error_number,error_message 2 from dba_recoverable_script_errors 3 where script_idD74179203F11445D8F3F3F77C0749A1D 4 and block_num5; 2. 根据错误信息进行排错 3. 根据实际情况进行执行/回滚/清除…

LeetCode 308. 二维区域和检索 - 可变(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个 2D 矩阵 matrix&#xff0c;请计算出从左上角 (row1, col1) 到右下角 (row2, col2) 组成的矩形中所有元素的和。 上述粉色矩形框内的&#xff0c;该矩形由左上角 (row1, col1) (2, 1) 和右下角 (row2, col2) (4, 3) 确定。其中&am…

实战 SQL Server 2008 数据库误删除数据的恢复 (转)

今天有个朋友很着急地打电话给我&#xff0c;他用delete语句误删除了SQL Server 2008数据库中两个表中的所有记录&#xff0c;而这个数据库之前没有任何备份。让我帮他解决一下&#xff0c;不然他要赔偿客户很多钱。 SQL Server中误删除数据的恢复本来不是件难事&#xff0c;从…

在线销售数据分析–人货场三维分析角度

文章目录一、数据来源及理解二、分析思路三、数据处理数据预处理数据清洗数据转换四、数据描述性统计五、三维分析-人用户质量分析用户类别分析DM(管理者)排名分析六、三维分析-货销售金额及销量分布情况商品退货率七、三维分析-场城市区域八、总结一、数据来源及理解 此次分析…

LeetCode 348. 判定井字棋胜负(计数)

文章目录1. 题目2. 解题1. 题目 请在 n n 的棋盘上&#xff0c;实现一个判定井字棋&#xff08;Tic-Tac-Toe&#xff09;胜负的神器&#xff0c;判断每一次玩家落子后&#xff0c;是否有胜出的玩家。 在这个井字棋游戏中&#xff0c;会有 2 名玩家&#xff0c;他们将轮流在棋…

C中几组指针

具体关于c指针说明可参考前面两篇文章。C中指针详解和C中复杂类型声明。 1、二维数组 下面就三种二维数组进行说明。 1: int **Ptr; 2: int *Ptr[ 5 ]; 3: int ( *Ptr )[ 5 ]; 以上三例都是整数的二维数组&#xff0c;都可以用形如 Ptr[ 1 ][ 1 ] 的方式访问其内容&#xff1b;…

LeetCode 694. 不同岛屿的数量(BFS/DFS+set)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 给定一个非空01二维数组表示的网格&#xff0c;一个岛屿由四连通&#xff08;上、下、左、右四个方向&#xff09;的 1 组成&#xff0c;你可以认为网格的四周被海水包围。 请你计算这个网格中共有多少个形状不同的岛屿。 两个岛…

xcode 4.2开发 ——navigation controller 添加按钮

添加一个按钮 UIBarButtonItem *rightButton [[UIBarButtonItem alloc] initWithTitle:"Add" style:UITabBarSystemItemContacts target:self action:selector(clickSettings:)]; self.navigationItem.rightBarButtonItem rightButton; 新版本xcode不用release 添…

数据分析-书籍整理(二)

业务书籍 《数据化管理-洞悉零售及电子商务》讲解了关于零售和电商的一些知识&#xff0c;有很多实用案例。很有借鉴意义。 《游戏数据分析实战》游戏各个阶段的数据分析&#xff0c;方法&#xff0c;数据来源&#xff0c;案例等。 《增长黑客》这本书我看了两遍&#xff0c…

LeetCode 1516. Move Sub-Tree of N-Ary Tree(DFS)

文章目录1. 题目2. 解题1. 题目 Given the root of an N-ary tree of unique values, and two nodes of the tree p and q. You should move the subtree of the node p to become a direct child of node q. If p is already a direct child of q, don’t change anything. …

空气质量指数(AQI)分析与预测

文章目录前言一、背景Ⅰ数据来源Ⅱ 数据背景Ⅲ 分析目的二、数据探索性分析Ⅰ 数据类型Ⅱ 描述性统计Ⅲ 数据预处理1.缺失值处理1&#xff09;删除缺失值2&#xff09;均值/中值填充2.异常值处理3.重复值处理三、数据分析Ⅰ空气质量排名Ⅱ 全国空气质量1.全国空气质量等级统计2…

如果程序跑着跑着就崩溃了,查看内存

程序跑的时间长就发生中断。 启动任务管理器&#xff0c;选择“进程”选项卡&#xff0c;查看程序的内存。 发现程序运行的过程中内存不断增长。 那么原因可能是运行过程中不断地分配了新的内存而没有释放。 查找的方法是注释代码&#xff0c;然后看内存是不是还在增长&#xf…

LeetCode MySQL解题目录

已完成的 LeetCode MySQL 数据库题目。点击查看我的 LeetCode 算法解题目录。 已解决 123/123 - 简单 54 中等 51 困难 18 前置入门学习 MySQL 基本查询、条件查询、投影查询MySQL 排序、分页查询、聚合查询MySQL 多表查询、连接查询&#xff08;内连接、外连接&#xff09;…

Anaconda3使用过程中遇到的问题

文章目录数据可视化中文、负号显示Anaconda使用pyecharts安装方法方法一&#xff1a;pip install pyecharts安装方法二&#xff1a;清华镜像安装方法三&#xff1a;离线安装成功安装后遇到的问题成功安装却不能使用不能使用某一个图&#xff1a;bar\grid决策树sklearn.exceptio…

AliasDB:简单统一灵活的数据库访问库(支持MSSQL/MySQL/SQLite/Oracle/ODBC/OleDb)适用于中小型系统...

数据库访问各种规模的应用程序不可避免的操作&#xff0c;.NET对提供了简单方便统一的数据库访问类&#xff0c;并且通过Enterprise Lib提供了更为顶层的数据库访问库。在我的人个工作中&#xff0c;现在用得最多的就是通过“动码代码生成器”对一次性生成数据库访问接口&#…

数据分析方法--回归分析方法((SPSS建模:多元线性回归案例)

文章目录回归定义最常用回归方法一、线性回归(Linear Regression)二、逻辑回归(Logistic Regression)三、多项式回归(Polynomial Regression)四、逐步回归(Stepwise Regression)五、岭回归(Ridge Regression)六、套索回归(Lasso Regression)七、回归(ElasticNet)如何正确选择回…

LeetCode MySQL 1511. Customer Order Frequency

文章目录1. 题目2. 解题1. 题目 Table: Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | | country | varchar | ------------------------ customer_id is the p…

LeetCode MySQL 1075. 项目员工 I

文章目录1. 题目2. 解题1. 题目 项目表 Project&#xff1a; ---------------------- | Column Name | Type | ---------------------- | project_id | int | | employee_id | int | ---------------------- 主键为 (project_id, employee_id)。 employee_id 是员…

The Shapes of CSS

http://home.cnblogs.com/blog/转载于:https://www.cnblogs.com/yanyanhappy/archive/2012/09/07/2675050.html