作者 : Xia Xinyu
日期 : 2021-12-26原题链接
如果一个正整数,其各个数位上的数字均满足要么是 0,要么是 1,则称该数字为 01 数。
例如,1 和 10 都是 01 数。
给定一个整数 n。
请你计算,1∼n 中有多少个 01 数。
输入格式
一行,一个整数 n。
输出格式
一个整数,表示 01 数的数量。
数据范围
前六个测试点满足 1≤n≤100。
所有测试点满足 1≤n≤109。
输入样例:
10
输出样例:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int ans = 0;
// n最多有10位
//满足条件的数共有512种情况,因为首位必须取1
//逆向思维,采用二进制枚举
for(int i = 1;i < 1 << 10;i ++){ //循环512次,枚举出每个满足条件的数
int t = 0;
for(int j = 0;j < 10;j ++)
t = t * 10 + (i >> j & 1);
if(t <= n) ans ++;
}
System.out.println(ans);
}
}
时间复杂度
:O(1)
空间复杂度
:O(1)