《剑指offer》面试题33、32——把数组排成最小的数、整数中1出现的次数
33.把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
代码:
```
#include<iostream>
#include<algorithm>
using namespace std;//链接:https://www.nowcoder.com/questionTerminal/8fecd3f8ba334add803bf2a06af1b993
//来源:牛客网/*对vector容器内的数据进行排序,按照 将a和b转为string后若 a+b<b+a a排在在前 的规则排序,如 2 21 因为 212 < 221 所以 排序后为 21 2 to_string() 可以将int 转化为string
*/class Solution
{public:static bool cmp(int a,int b){string A="";string B="";A+=to_string(a);A+=to_string(b);B+=to_string(b);B+=to_string(a);return A<B;}string PrintMinNumber(vector<int> numbers){string answer="";sort(numbers.begin(),numbers.end(), cmp);for(int i=0;i<numbers.size();i++){answer+=to_string(numbers[i]);}return answer;}
};int main()
{// int Min=NumberOf1Between1AndN_Solution(12);
// cout<<Min<<endl;vector<int> vec={3,32,321};Solution t;string ans=t.PrintMinNumber(vec);cout<<ans<<endl;return 0;
}
32.面试题32:整数中1出现的次数(从1到n整数中1出现的次
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
解法1:
链接:https://blog.csdn.net/yi_afly/article/details/52012593
https://blog.csdn.net/crazy__chen/article/details/48597577
对于某个位置,它可以是大于1,等于1,等于0:
若cur为0,则1出现次数为round*base
若cur为1,则1出现次数为round*base+former+1
若cur大于1,则1出现次数为rount*base+base
比如:
534 = (个位1出现次数)+(十位1出现次数)+(百位1出现次数)=(53*1+1)+(5*10+10)+(0*100+100)= 214
530 = (53*1)+(5*10+10)+(0*100+100) = 213
504 = (50*1+1)+(5*10)+(0*100+100) = 201
514 = (51*1+1)+(5*10+4+1)+(0*100+100) = 207
10 = (1*1)+(0*10+0+1) = 2
代码:
public class Solution {public int NumberOf1Between1AndN_Solution(int n) {int i = 1;int before=0;//由i位前决定的1数目(高位)int current = 0;//由i位决定的1数目int after=0;//由i位后决定的1数目(低位)int count = 0;while((n/i)>0){current = (n/i)%10;before = n/i/10;after = n - (n / i) * i;if(current>1){count = count + (before + 1) * i;}else if (current == 0){count = count + before * i;}else if (current == 1){count = count + before * i + after + 1;}i = i * 10;}return count;}
}
解法二:常规解法:
代码:
int NumberOf1Between1AndN_Solution(int n)
{int count = 0;for(int i=0; i<=n; i++){int temp = i;//如果temp的任意位为1则count++while(temp){if(temp%10 == 1){count++;}temp /= 10;}}return count;
}
《剑指offer》面试题33、32——把数组排成最小的数、整数中1出现的次数相关推荐
- 剑指 Offer 面试题45:把数组排成最小的数——Python内置函数 map()、__lt__()、join()、sorted()
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 输出结果可能非常大,所以需要返回一个字符串而不是整数. 拼接起来的数字可能会有前导 0,最后结果 ...
- 剑指offer——面试题33:把数组排成最小数
剑指offer–面试题33:把数组排成最小数 Solution1: 20180904复习.重点记忆比较技巧!!! 代码参考网址:https://www.nowcoder.com/profile/416 ...
- 剑指offer——面试题8:旋转数组的最小数字
剑指offer--面试题8:旋转数组的最小数字 Solution1: 自己想的复杂度为O(n)O(n)O(n)的算法,若用二分查找则: 1.代码复杂:2.最坏情况下的二分查找的时间复杂度亦为O(n)O ...
- 牛客网在线编程专题《剑指offer-面试题33》把数组排成最小的数
我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容, ...
- [剑指offer]面试题8:旋转数组的最小数字
面试题8:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2 ...
- 《剑指offer》第四十三题(从1到n整数中1出现的次数)
// 面试题43:从1到n整数中1出现的次数 // 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如 // 输入12,从1到12这些整数中包含1 的数字有1,10,11和12 ...
- 33:把数组排成最小的数
/*** 面试题33:把数组排成最小的数* 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.* 例如输入数组{3,32,321},则打印出这三个数字能排成的 ...
- 剑指offer 面试题三 找出数组中重复的数字
1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...
- 剑指offer——面试题14:调整数组顺序使奇数位于偶数前面
剑指offer--面试题14:调整数组顺序使奇数位于偶数前面 Solution1: 顺序交换,比较好的算法!!! class Solution { public:void reOrderArray(v ...
- 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字
今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...
最新文章
- matlab的讲稿ppt,Matlab初步(讲稿200508)之四
- oracle 事务测试
- 在Java 8之前的项目中使用JUnit 5
- Apple Watch新功能曝光:“一键收取”蚂蚁森林能量
- 图片底下配的文字叫什么_PPT排版狂想篇 | 如何用一张图片搞定30种排版
- aspose.pdf-17.8暴力破解,附破解过程和使用代码。仅供参考,不可用于商业用途
- 高通 mdm9607编译以及audio框架
- Centos7虚拟机MySQ连接Hive
- python 二维转一维_Numpy 将二维图像矩阵转换为一维向量的方法
- Java猫和狗(继承,多态,抽象,接口版)上
- CSS中的十二种结构伪类选择器
- android协议分析,对一个apk的协议分析
- jvm内存模型与垃圾回收
- 安徽工程大学计算机与信息学院教师,杨丹 - 安徽工程大学 - 计算机与信息学院...
- php 选择地区 查找,地区编码查询_php根据ip查询所在地区的代码
- 从零开始,手把手教你python爬取美足船袜网!
- 字体问题-如何判断GB2312
- 自己造一个简易的IOC轮子
- 公司停电,程序员去网吧写代码;iPhone 14将于北京时间9月8日发布;GitLab修复一个关键远程代码执行漏洞|极客头条
- 企微魔盒独立版v15.1