AcWing第 31 场周赛——01数

题目描述

如果一个正整数,其各个数位上的数字均满足要么是 0,要么是 1,则称该数字为 01数。

例如,1和 10 都是 01数。

给定一个整数 n。请你计算,1∼n中有多少个 01数。

输入格式

一行,一个整数 n。

输出格式

一个整数,表示 01数的数量。

数据范围

前六个测试点满足 1≤n≤100。
所有测试点满足 1≤n≤109。

输入样例:

10

输出样例:

2

示例代码

 1 import java.util.*;
 2 
 3 public class Main {
 4     
 5     private static int res = 0;
 6     
 7     private static int n;
 8     
 9     private static int[] val = new int[10];
10     
11     private static int[] visit = new int[10];
12     
13     public static void main(String[] args) {
14         Scanner input = new Scanner(System.in);
15         n = input.nextInt();
16         int len = String.valueOf(n).length();
17         recursion(len, 1);
18         System.out.println(res);
19     }
20     
21     public static void recursion(int len, int pos) {
22         if (pos > len) {
23             int total = 0;
24             for (int i = 1; i <= len; i++) {
25                 if (val[i - 1] == 1) {
26                     total += Math.pow(10, len - i);
27                 }
28             }
29             if (total >= 1 && total <= n) {
30                 res++;
31             }
32             return;
33         }
34         
35         for (int i = 0; i <= 1; i++) {
36             if (visit[pos - 1] == 0) {
37                 // 标记
38                 visit[pos - 1] = 1;
39                 val[pos - 1] = i;
40                 // 递归
41                 recursion(len, pos + 1);
42                 // 清除
43                 visit[pos - 1] = 0;
44             }
45         }
46     }
47 }

 

上一篇:31岁才转行程序员,目前34了,我的经历和一些感受


下一篇:python学习笔记-学习中遇到的坑