竞赛
考级
题目分析 这道题做法有很多,下面列举部分。 方法一:可以使用二进制运算,每次取二进制中的最后一位,看是否为一。 方法二:每次&上 n−1n-1n−1,消除二进制中最右边的 111。 方法三:使用 bitset 容器,用 count 方法直接求。 AC 代码 方法一 方法二 方法三 复杂度分析 每次运算的次数与 111 的个数有关,设 111 的个数为 NNN,复杂度为 O(N)O(N)O(N)。
AC君
这题不需要完整的求二进制,只需要看一直除以二,余数有几个1就行 时间复杂度:O(log2n)O(log_2n)O(log2 n)
队团加不)童帅_者仇复
这道题本狗是用递归做的,这样子想起来简单一点,当然有别的方法,不多赘述! 开始正经讲题! 首先,这道题提到了十进制转二进制,那么我们就会想到一个东东—— 辗转取余法(锵锵锵锵~那边用位权枚举的XX,闭嘴!) 他的过程其实是很简单的,就是 除二取余,去余再除 除二取余,去余再除 除二取余,去余再除*n直到为零 那么就有狗发现了(一大堆) “他好像是一位位取的诶?那我一个一个判断不就好了吗?” 而且他的过程重复,相当于一直调用自身...
复仇者_ドラゴンコア
沈思邈
有事找大号
黑客_天之神_ZDZL_zsy
151****9879