前言:
如今我们对“one target”都比较关注,大家都想要分析一些“one target”的相关内容。那么小编在网摘上汇集了一些对于“one target””的相关知识,希望姐妹们能喜欢,大家一起来了解一下吧!2022-03-10:限制:0 <= start <= end,0 <= target <= 64。
[start,end]范围上的数字,有多少数字二进制中1的个数等于target。
真实面试题,被问到了四五次,包括华为。
答案2022-03-10:
求0到x等于target的个数,然后做差。
代码用golang编写。代码如下:
package mainimport "fmt"func main() { ret := nums4(33281731, 204356810, 17) fmt.Println(ret)}func nums4(start, end, target int) int { if start < 0 || end < 0 || start > end || target < 0 { return -1 } anse := process4(63, target, end) if start == 0 { return anse } else { anss := process4(63, target, start-1) return anse - anss }}func process4(index, rest, num int) int { if rest > index+1 { return 0 } if rest == 0 { return 1 } if (num & (1 << index)) == 0 { return process4(index-1, rest, num) } else { return c(index, rest) + process4(index-1, rest-1, num) }}// 求C(N,A)的解// N! / (A! * (N - A)!)// 即 : (A+1 * A+2 * ... * N) / (2 * 3 * 4 * (N-A))// 为了不溢出,每一步求一个最大公约数,然后消掉func c(n, a int) int { if n < a { return 0 } up := 1 down := 1 for i, j := a+1, 2; i <= n || j <= n-a; { if i <= n { up *= i i++ } if j <= n-a { down *= j j++ } gcd := gcd0(up, down) up /= gcd down /= gcd } return up / down}// 求m和n的最大公约数func gcd0(m, n int) int { if n == 0 { return m } else { return gcd0(n, m%n) }}
执行结果如下:
***
[左神java代码]()
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #one target #onetarget