AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

N0025. 0520-等距二进制判断

中等通过率 46% · 提交 28 · 通过 13
模拟字符串数学

小慕在分析一个二进制数时,定义了一种特殊的距离:相邻两个1之间0的个数称为它们之间的距离。例如,二进制数1001011中,从左到右相邻两个1之间的距离分别是2、1、0。 现在,如果一个整数转换成二进制数后满足以下两个条件: 1. 二进制表示中至少包含3个1 2. 所有相邻的1之间的距离都相等 小慕就把这个数称为“数”。例如,21(二进制为10101)、60(二进制为111100)、146(二进制为10010010)都是等距二进制数。

提示:带虚线的词点一下有通俗解释。

输入描述

现给定一个输入,整数0 <= n < (2^31-1)

输出描述

如果 n 是等距二进制,请输出它的距离,如果不是等距二进制,请输出 -1

示例

示例 1

输入

21

输出

1

说明:二进制为 10101,距离为 1

示例 2

输入

60

输出

0

说明:二进制为 111100,距离为 0

示例 3

输入

146

输出

2

说明:二进制为 10010010,距离为 2

示例 4

输入

2

输出

-1

说明:二进制为 10,不满足条件 1 ,非等距二进制

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
等距二进制示例:146 → 10010010 1 0 0 1 0 0 1 0 距离 = 2 距离 = 2 所有相邻 1 之间的距离都是 2,所以是等距二进制 输出距离:2
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「0520-等距二进制判断」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。