《剑指offer》第四十四题(数字序列中某一位的数字)
// 面试题44:数字序列中某一位的数字
// 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这
// 个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一
// 个函数求任意位对应的数字。 #include <iostream>
#include <algorithm> using namespace std; int countOfIntegers(int digits);
int digitAtIndex(int index, int digits);
int beginNumber(int digits); int digitAtIndex(int index)//查找index位置的值
{
if (index < )//判断无效输入
return -; int digits = ;
while (true)
{
int numbers = countOfIntegers(digits);//digits位的最多个数
if (index < numbers * digits)
return digitAtIndex(index, digits);//若在这个范围内,就开始查找 index -= digits * numbers;//减去digits位的最多个数,在下一个digits+1位范围内查找
digits++;
} return -;
} int countOfIntegers(int digits)//digits位的最多个数
{
if (digits == )
return ; int count = (int)std::pow(, digits - );
return * count;
} int digitAtIndex(int index, int digits)//函数重载,index在digits位内的位置
{
int number = beginNumber(digits) + index / digits;//找到要落在的那个数值
int indexFromRight = digits - index % digits;//计算从右看过位置
for (int i = ; i < indexFromRight; ++i)//这个牛批,这是计算落在的那个字符,注意i=1
number /= ;
return number % ;//要用余数才可以得到
} int beginNumber(int digits)//digits位的初始值
{
if (digits == )
return ; return (int)std::pow(, digits - );
} // ====================测试代码====================
void test(const char* testName, int inputIndex, int expectedOutput)
{
if (digitAtIndex(inputIndex) == expectedOutput)
cout << testName << " passed." << endl;
else
cout << testName << " FAILED." << endl;
} int main()
{
test("Test1", , );
test("Test2", , );
test("Test3", , );
test("Test4", , );
test("Test5", , ); // 数字99的最后一位,9
test("Test6", , ); // 数字100的第一位,1
test("Test7", , ); // 数字370的第一位,3
test("Test8", , ); // 数字370的第二位,7
test("Test9", , ); // 数字370的第三位,0
system("pause");
return ;
}
《剑指offer》第四十四题(数字序列中某一位的数字)的更多相关文章
- 剑指Offer(二十八):数组中出现次数超过一半的数字
剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...
- 《剑指offer》第二十二题(链表中倒数第k个结点)
// 面试题22:链表中倒数第k个结点 // 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯, // 本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点, ...
- 《剑指offer》第十二题(矩阵中的路径)
// 面试题:矩阵中的路径 // 题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有 // 字符的路径.路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左.右. // 上.下移动 ...
- 剑指offer——python【第28题】数组 中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 剑指Offer(三十四):第一个只出现一次的字符
剑指Offer(三十四):第一个只出现一次的字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...
- 剑指Offer(二十四):二叉树中和为某一值的路径
剑指Offer(二十四):二叉树中和为某一值的路径 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 剑指Offer(三十五):数组中的逆序对
剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...
- 剑指 Offer 44. 数字序列中某一位的数字 + 找规律 + 数位
剑指 Offer 44. 数字序列中某一位的数字 Offer_44 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author Wale ...
- 【Offer】[44] 【数字序列中某一位的数字】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 数字以0123456789101112131415..的格式序列化到一个字符序列中.在这个序列中,第5位(从0开始计数)是5,第13位是 ...
- 《剑指offer》第十四题(剪绳子)
// 面试题:剪绳子 // 题目:给你一根长度为n绳子,请把绳子剪成m段(m.n都是整数,n>1并且m≥1). // 每段的绳子的长度记为k[0].k[1].…….k[m].k[0]*k[1]* ...
随机推荐
- php 把秒数转换为时长(h:i:s格式)
/** * 把秒数转换为时分秒的格式 * @param Int $times 时间,单位 秒 * @return String */ function secToTime($times){ $resu ...
- SVN如何将版本库url访问地址中的https改为http
1.选择控制台树中的根节点,右键选择“属性”. 2.切换至面板“网络”. 3.取消勾选项“使用安全连接协议(https://)”.
- js 解密 16进制转10进制,再取ascii码的对应值
如:\x64 对应 16进制 0x64 转10进制就是 0x64.toString(10) == 100, 查对应的ascii码表得到 ‘d' <div id=code style='displ ...
- Java中断异常 InterruptedException 的正确处理方式
你看到这篇文件可能是因为你已经调用了一个抛出 InterruptedException 异常的方法,并且需要以某种方式处理它. 首先,需要了解为一个方法为啥会 throws InterruptedEx ...
- 前端基础小标签5 H5的一些新标签属性
第二部分 部分图片和内容摘要于网络 二. formaction 属性规定当表单提交时处理输入控件的文件的 URL. formaction 属性覆盖 <form> 元素的 action 属性 ...
- C++进程间通信之剪贴板
转载:http://blog.csdn.net/hk627989388/article/details/53693636 转载:http://blog.csdn.net/heihei36/articl ...
- ThreadPoolExecutor线程池
为什么使用线程池: 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率. 2.线程并发数量过多,抢占系统资源从而导致阻塞. 3.对线程进行一些简单的管理. 在java ...
- was清除项目缓存数据
步骤 彻底清理删除后的项目缓存 删除${WAS_HOME}\AppServer\profiles\AppSrv01\config\cells\xxxxxNode01Cell/applications/ ...
- Python3 tkinter基础 Frame bind 鼠标移动事件 实时显示鼠标的位置
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python 处理 CSV/EXCEL 表格文件
只想说,数据挖掘工作,80%时间都花在处理数据上了,这句话真不假! 最近和小伙伴组了个队参加数据分析比赛,记录下我处理 csv 文件的一些步骤吧: 修改csv文件 可以用csv模块1,官方文档2 im ...