字典序第k小的数字

给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。

注意:1 ≤ k ≤ n ≤ 109

示例 :

输入:

n: 13 k: 2

输出:

10

解释:

字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。

思路

十叉树,比如10 ~ 20在这一层有10个数,如果20小于n,那么再找第三层100 ~ 200,每层step就min(n + 1, n2) - n1

 public class Solution {
public int findKthNumber(int n, int k) {
int cur = 1;
int step;
k--;
while (k > 0) {
step = calStep(n, cur, cur + 1);
if (step <= k) {
k -= step;
cur++;
} else {
k--;
cur *= 10;
}
}
return cur;
}
private int calStep(int n, long n1, long n2) {
int step = 0;
while (n1 <= n) {
step += Math.min(n + 1, n2) - n1;
n1 *= 10;
n2 *= 10;
}
return step;
}
}

最新文章

  1. hdu 4481 Time travel(高斯求期望)(转)
  2. Caffe 源碼閱讀(四) Layer.hpp Layer.cpp
  3. greendao操作数据库的使用方法
  4. C#事物执行数据
  5. Oracle RAC 并发与架构
  6. PHP GC垃圾回收机制之引用变量回收周期疑问
  7. PHP中基本符号及使用方法
  8. dbforge studio for mysql 怎样破解
  9. Android异步请求
  10. Selenium Webdriver ie 浏览器
  11. hdu_3518_Boring counting(后缀数组)
  12. semantic UI first web
  13. 指定路径下建立Access数据库并插入数据
  14. 基于Centos7的autobahn-python+crossbar的环境搭建
  15. 纯css实现轮播(渐变式 less语法)
  16. Oracle表空间碎片整理SHRINK与MOVE
  17. Java Web——过滤器
  18. win10 安装多个版本的jdk,如何切换
  19. Linux基础命令---杀死进程killall
  20. CountDownLatch在多线程程序中的应用

热门文章

  1. Lucene-如何编写Lucene程序
  2. C# XML序列化/反序列化类XmlSerializer使用示例
  3. Nuget~管理自己的包包
  4. UVA 11987 Almost Union-Find (单点修改的并查集)
  5. [web笔记]解决跨域问题以及axios每次提交session变化的问题
  6. Kunernetes集群架构与组件
  7. HTML_5 (1 2 3的代码总结)
  8. 用 label 控制 Pod 的位置
  9. [BZOJ4327]:[JZOI2012]玄武密码(AC自动机)
  10. localStorage对象