记录一道没见过的题【幸运数字】

1. 题目描述

如题,只由47或者他们的组合构成的数字称为幸运数字,这个列表按照从小到达排序。

求第K个数是多少。

示例1:

输入:k = 5
输出:74

说明K很大,0<K<10180 <K<10^{18}0<K<1018。

2. 解答

不妨先将之写出来:

4, 7, 44, 47, 74, 77, 444, 447, 474, 477, 744, 747, 774, 777...

可以构建这么一颗二叉树:

private int Main(int K){//1. 求解高度: 向下取整再加1int h = (int) Math.floor(Math.log(K + 1)/Math.log(2)) + 1;//2. 求解上层到跟节点的节点总数(包括虚拟节点)int num = (int) (Math.pow(2, h - 1) - 1);//3. 求解元素所在当前层的下标位置idxint idx = (K + 1) - num - 1;  // 总元素个数 - 上层到根元素个数 - 1 表示下标//4. 求解映射关系StringBuilder sb = new StringBuilder();for (int i = 0; i < h - 1; i++) {if((idx & 1) == 0)sb.append("4");else sb.append("7");idx = idx >> 1;}return Integer.parseInt(sb.reverse().toString());
}

注释:

logab=log2blog2alog_a^b = \frac{log_2^b}{log_2^a} logab​=log2a​log2b​​

因为Java中只提供了log10,故而需要使用下面的计算法方式:

Math.log(K + 1)/Math.log(2)

求第K个幸运数字(只由4、7或者他们的组合构成的数称为幸运数字)相关推荐

  1. 周杰伦官宣数智人“周同学”,数智人与数字人,不止一字之差

    ‍数据智能产业创新服务媒体 --聚焦数智 · 改变商业 5月8日,周杰伦亮相中国移动元宇宙总部,与中国移动达成元宇宙领域系列合作,共同推出了数智人"周同学". 周杰伦从 2003 ...

  2. 【最详细】BFPRT算法:时间复杂度O(n)求第k小的数字

    去年写了一篇对快排进行改进的算法,可以在时间复杂度 O(n)O(n)O(n)的情况下,找到第kkk小的数字. 那时候,我还不知道这个算法叫BFPRT算法--现在知道了,还知道它又被称为中位数的中位数算 ...

  3. BFPRT算法:时间复杂度O(n)求第k小的数字(分治算法+快排)

    我自己搭建了博客,以后可能不太在CSDN上发博文了,https://www.qingdujun.com/ . 去年写了一篇<分治算法 求第kkk小元素 O(n)O(n)O(n) & O( ...

  4. 两个有序数组合起来求第k小的数+左老师专访ACM大神(笔记)8月5日斗鱼直播实录

    1.长度相等的两个有序数组寻找上中位数 注:上中位数1 2 3 4 5 6为3(偶数两个中位数为前面那个) 思路:去掉不可能为上中位数的,剩下的简化组合求上中位数. 1.1 奇数序列 位置 位置 位置 ...

  5. [leetcode]堆排序 求前k大的数

    前一篇博客中写到了排序算法,其中包含一个堆排序,因此本篇博客讲解堆这个数据结构及其应用. 关于最大堆最小堆以及初始建堆和整理堆在上篇博客中有提及,此处不再赘述.下面讲解一个堆的重要应用,求n个数中前k ...

  6. 堆实战(动态数据流求top k大元素,动态数据流求中位数)

    动态数据集合中求top k大元素 第1大,第2大 ...第k大 k是这群体里最小的所以要建立个小顶堆 只需要维护一个大小为k的小顶堆 即可当来的元素(newCome)> 堆顶元素(smallTo ...

  7. A*算法的认识与求第K短路模板

    现在来了解A*算法是什么 现在来解决A*求K短路问题 在一个有权图中,从起点到终点最短的路径成为最短路,第2短的路成为次短路,第3短的路成为第3短路,依此类推,第k短的路成为第k短路.那么,第k短路怎 ...

  8. 选择问题(求第k个最小元素)

    什么是选择问题 划分的思路 Lomuto 划分 利用划分求第k小元素 C语言实现 改进 参考资料 什么是选择问题 选择问题(selection problem)是求一个n个数列表的第k个最小元素的问题 ...

  9. Java黑皮书课后题第7章:7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则最小

    7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标.编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则返回最小的下标) 题目 题目描述 ...

最新文章

  1. APP程序内部打开某个APP的AppStore页面
  2. 017-平衡二叉树(三)
  3. 【Linux】一步一步学Linux——type命令(200)
  4. mysql查询时传入中文时的乱码问题
  5. 【Python-3.3】字典中存储列表
  6. vscode是什么(vscode干嘛用的)
  7. 前端bugger 后端debug 介绍系统内部逻辑 压测新增订单接口 tps上不去 ,oom ,常见性能问题 ,性能分析思路
  8. 铁血战士之异形大战铁血战士2 观感
  9. 解决 Ubuntu 22.04 Fractional Scaling 画面伸缩后应用程序模糊
  10. android gps定位工具类,Android原生GPS和网络定位工具类
  11. 群、环、域的概念,定义和理解.
  12. Banana Pi 消息
  13. Java实现递归 斐波那契数列 阶乘
  14. 植物大战僵尸:查找植物叠加种植CALL
  15. 多重引导的另一种方法
  16. 维特智能4g远程物联姿态三轴加速度角度传感器WT901IOT
  17. 多种详细讲解小程序页面传值
  18. 通信的数学理论_《香农传》告诉你为什么要学好数学
  19. 爬取(明星网)明星面部数据
  20. wpf中textblock竖立显示文本

热门文章

  1. PVE虚拟机黑群晖联机失败解决方法!
  2. MTK 4G核心板MT6771可做什么方案?
  3. #C51 IIC通讯(底层配置时序)
  4. 台湾省九齐NY8B062E与NY8B062D对比区别差异
  5. Python列表循环左移
  6. 图扑软件 | 虚拟电厂负荷控制系统可视化
  7. AE motion 2插件
  8. 最小二乘法拟合圆(PythonC++实现)
  9. 调音台docker教程_Docker Hello World
  10. 阿里巴巴的P8架构师会辞职吗?