【每天一道算法题】Numeric Keypad
题目描述
The numberic keypad on your mobile phone looks like below:
123
456
789
0
suppose you are holding your mobile phone with single hand. Your thumb
points at digit 1. Each time you can 1)press the digit your thumb
pointing at.2)moveyour thumb right,3)move your thumb down. Moving your
thumb left or up is not allowed.
By using the numeric keypad under above constrains, you can produce
some numbers like 177 or 480 while producing other numbers like 590 or
52 is impossible.
Given a number K, find out the maximum number less than or equal to K
that can be produced.
输入描述:
the first line contains an integer T, the number of testcases.
Each testcase occupies a single line with an integer K. For 50%of the data ,1<=K<=999.
For 100% of the data, 1<=K<=10^500,t<=20.
输出描述:
for each testcase output one line, the maximum number less than or equal to the corresponding K that can be produced.
输入例子:
3
25
83
131
输出例子:
25
80
129
剑指offer公司真题部分,微软的题目。

#include <iostream>
#include <vector>
#include <string>
#include <queue>
using namespace std;
int pad[][] = {
{ },
{ ,,,,,,,,, },
{ ,,,,,, },
{ ,, },
{ ,,,,,, },
{ ,,,, },
{ , },
{ ,,, },
{ ,, },
{ } };
int last[] = { ,,,,,,,,, }; string maxnum(string& s1) {
string s2;
s2.push_back(s1[]);
int len = s1.length();
for (int i = ; i < len; ) {
int need = s1[i] - '';
int key = s2.back() - '';
int j = ;
for (j = last[key]; j >= ; j--)
{
if (pad[key][j] == need) {
i++;
s2.push_back(pad[key][j] + '');
break;
}
} if (j < ) {
for (j = last[key]; j >= ; j--)
{
if (pad[key][j] < need) {
s2.push_back(pad[key][j] + '');
key = s2.back() - '';
for (int j = s2.size(); j < len; j++)
s2.push_back(pad[key][last[key]] + '');
return s2;
}
}
} if (j < ) {
need = key;
s2.pop_back();
if (s2.size() == ) {
s2.push_back(need - + '');
key = s2.back() - '';
for (int j = s2.size(); j < len; j++)
s2.push_back(pad[key][last[key]] + '');
return s2;
} key = s2.back()-'';
for (j = last[key]; j >= ; j--)
{
if (pad[key][j] < need) {
s2.push_back(pad[key][j] + '');
key = s2.back() - '';
for (int j = s2.size(); j < len; j++)
s2.push_back(pad[key][last[key]]+'');
return s2;
}
}
} }
return s2;
} int main() {
int num;
cin >> num;
vector<string> vec(num,"");
for (int i = ; i < num; i++)
cin >> vec[i];
for (int i = ; i < num; i++)
cout << maxnum(vec[i]) << endl;
return ;
}
【每天一道算法题】Numeric Keypad的更多相关文章
- 每天一道算法题(4)——O(1)时间内删除链表节点
1.思路 假设链表......---A--B--C--D....,要删除B.一般的做法是遍历链表并记录前驱节点,修改指针,时间为O(n).删除节点的实质为更改后驱指针指向.这里,复制C的内容至B(此时 ...
- 从一道算法题实现一个文本diff小工具
众所周知,很多社区都是有内容审核机制的,除了第一次发布,后续的修改也需要审核,最粗暴的方式当然是从头再看一遍,但是编辑肯定想弄死你,显然这样效率比较低,比如就改了一个错别字,再看几遍可能也看不出来,所 ...
- 【每天一道算法题】时间复杂度为O(n)的排序
有1,2,……一直到n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度为O(1),使用交换,而且一次只能交换两个数. 这个是以前看到的算法题,题目不难.但是要求比较多,排序算法中,时间 ...
- 提前批笔试一道算法题的Java实现
题目描述 这是2021广联达校招提前批笔试算法题之一. 我们希望一个序列中的元素是各不相同的,但是理想和显示往往是有差距的.现在给出一个序列A,其中难免有相同的元素,现在提供了一种变化方式,使得经过若 ...
- 每天一道算法题-leetcode136-只出现一次的数字
前言 打卡第一天 2019.10.26日打卡 算法,即解决问题的方法.同一个问题,使用不同的算法,虽然得到的结果相同,但是耗费的时间和资源是不同的.这就需要我们学习算法,找出哪个算法更好. 大家都知道 ...
- 一道算法题加深我对C++中map函数的理解
一.一道题目引发我对map函数的考量 首先是题目大意:有n个银行,a[i]表示这个人在第i个银行有a[i]块钱(可以是负数),所有银行的钱加起来正好是0.每次只能在相邻的银行之间转账,问最少要转多少次 ...
- 每天一道算法题(14)——N个降序数组,找到最大的K个数
题目: 假定有20个有序数组,每个数组有500个数字,降序排列,数字类型32位uint数值,现在需要取出这10000个数字中最大的500个. 思路 (1).建立大顶堆,维度为数组的个数,这里为20( ...
- 认真对待每一道算法题 之 两个排序好的数组寻找的第k个大的数
转载博客:http://www.cnblogs.com/buptLizer/archive/2012/03/31/2427579.html 题目意思:给出两个排好序的数组 ,不妨设为a,b都按升序排列 ...
- 《github一天一道算法题》:分治法求数组最大连续子序列和
看书.思考.写代码. /*************************************** * copyright@hustyangju * blog: http://blog.csdn. ...
随机推荐
- Oracle 11g RAC 自动应用PSU补丁简明版
环境:Oracle RAC(GI 11.2.0.4 + DB 11.2.0.4) 本文应用补丁信息: Patch 23615403 - Combo of OJVM Component 11.2.0.4 ...
- VB6之图像灰度与二值化
老代码备忘,我对图像处理不是太懂. 注:部分代码引援自网上,话说我到底自己写过什么代码... Private Declare Function GetBitmapBits Lib "gdi3 ...
- ActiveMQ 503错误
问题描述: 在Linux系统下安装ActiveMQ,启动服务 正常启动后,通过浏览器进行访问 可以正常显示home页面,但是点击其他菜单,如Queues,Topics等,都会出现503错误,如图 问题 ...
- vijos1101题解
题目: 研究表明,这种传染病的传播具有两种很特殊的性质: 第一是它的传播途径是树型的,一个人X只可能被某个特定的人Y感染,只要Y不 得病,或者是XY之间的传播途径被切断,则X就不会得病. 第二是,这种 ...
- Python数据分析之路(一)查询和统计
0. 如何入门数据分析 关注沙漠之鹰的同学一定看过沙漠君写得很多篇数据分析文章,比如分析房价,车价,预测机动车摇号这些话题.其实文章中所有的分析都使用了Python和它非常强大的数据分析库Pandas ...
- CSS自定义动画
动画名称 animation-name : (动画名称必须与@keyfarmes的名称相对应,因为动画名称是由@keyfarmes定义的) 例如:animation-name:AA:则 @ ...
- Chrome浏览器扩展开发系列之十八:扩展的软件国际化chrome.i18n API
i18n是internationalization 的简写,这里将讨论软件国际化的问题.熟悉软件国际化的朋友应该知道,软件国际化要求,页面中所有用户可见的字符串都必须置于资源属性文件中.资源属性文件中 ...
- [LeetCode] Wildcard Matching 题解
6. Wildcard Matching 题目 Implement wildcard pattern matching with support for '?' and '*'. '?' Matche ...
- 使用curl模拟ip和来源进行网站采集的实现方法
对于限制了ip和来源的网站,使用正常的采集方式是不行的.本文将介绍一种方法,使用php的curl类实现模拟ip和来源,实现采集限制ip和来源的网站. 1.设置页面限制ip和来源访问 server.ph ...
- nyoj_471:好多的树(容斥原理)
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=471 还是直接上代码.. #include<bits/stdc++.h> u ...