2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个? 腾讯音乐2022校园招聘。

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个? 腾讯音乐2022校园招聘。相关的知识,希望对你有一定的参考价值。

2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个?
腾讯音乐2022校园招聘。

答案2022-03-23:

二分法。

代码用golang编写。代码如下:

package main

import "fmt"

func main() 
	ret := minM(5, 2)
	fmt.Println(ret)


func minM(n, k int) int 
	len0 := bits(n, k)
	l := 1
	r := power(k, len0+1)
	ans := r
	for l <= r 
		m := l + ((r - l) >> 1)
		if ones(m, k) >= n 
			ans = m
			r = m - 1
		 else 
			l = m + 1
		
	
	return ans


func bits(num, k int) int 
	len0 := 0
	for num != 0 
		len0++
		num /= k
	
	return len0


func power(base, power int) int 
	ans := 1
	for power != 0 
		if (power & 1) != 0 
			ans *= base
		
		base *= base
		power >>= 1
	
	return ans


func ones(num, k int) int 
	len0 := bits(num, k)
	if len0 <= 1 
		return len0
	
	offset := power(k, len0-1)
	first := num / offset
	curOne := num%offset + 1
	if first != 1 
		curOne = offset
	
	restOne := first * (len0 - 1) * (offset / k)
	return curOne + restOne + ones(num%offset, k)


执行结果如下:


左神java代码

以上是关于2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个? 腾讯音乐2022校园招聘。的主要内容,如果未能解决你的问题,请参考以下文章

第 256 场力扣周赛(状态压缩+dp,二进制子序列的动规940)

51nod 1166 K进制下的大数 (快速幂)

51NOD 1116 K进制下的大数(字符串取模 + 枚举)

Leetcode No.4两个排序数组的中位数

b_lc_数组中最大数对和的最小值(排序+思维 | 进阶:第k)

酷客多小程序签约CKEA Canada正式进军加拿大市场