pow(x,y)在#include<math.h>文件中,计算x的y次方。

C++引入头文件:#include <stdlib.h> 或者 #include <cstdlib>

1、整数转化为字符串的方法:

1.1 atoi原型:注意:参数若为string类型一定转换成char*型(str.c_str()

  1. #include <stilib.h>或者#include<cstdlib>
  2. int atoi(const char *str);

atoi作用:把str字符串转换成整型数。如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字或结束符 \0 时停止转换,返回整型数。

itoa原型

  1. #include<cstdlib>或者#include<stdlib.h>
  2. char *str[20];
  3. char* itoa(int num, char* str, int radix);

itoa作用:将value所代表的整数转换为字符串。其中,value是要转换的整数值,string是存储转换后值的字符数组,radix代表进制,radix=10就是十进制,radix=2就是二进制。

itoa值得注意的是:

1. 第二个参数只能是char*型,不能是string型;

2. 第二个参数在使用之前必须提前分配存储空间,在C++中就是new一块内存。

1.2 C++中整数转换为string。

stringstream( )
     <sstream.h>
 例如:
       int hello=4;
       stringstream ss;
       ss<<hello;
       string   s=ss.str();
     //调用string的方法
       cout<<s.c_str()<<endl;

1.3 sprintf

sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。

char buf[];
sprintf(buf, "%d", );
string b = buf;

上面将100转化为字符串。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

思路:

1、最原始的方法使用permutation得到所有的全排列,然后将每个排列转化为整数,比较得出最小的整数。大数很容易越界,超出计算机表示范围。

#include<iostream>
#include<vector>
#include<sstream>
#include<unordered_map>
#include<math.h> using namespace std; void helper(vector<int>& numbers, vector<int> visited, vector<vector<int>> &result, vector<int> tmp) {
if (tmp.size() == numbers.size()) {
result.push_back(tmp);
return;
}
for (int i = ; i < numbers.size(); ++i) {
if (i != && numbers[i] == numbers[i - ] && visited[i - ] == || visited[i] == ) {
continue;
}
visited[i] = ;
tmp.push_back(numbers[i]);
helper(numbers, visited, result, tmp);
tmp.pop_back();
visited[i] = ;
}
}
int permutation(vector<int>& numbers) {
vector<vector<int>> result;
int minNum = INT_MAX;
vector<int> Tmp;
if (numbers.size() == ) {
return ;
}
vector<int> visited(numbers.size(), );
helper(numbers, visited, result, Tmp);
unordered_map<int, int> hashMap;
for (int n : numbers) {
int countPos = ;
int n1 = n;
while (n != ) {
n = n / ;
++countPos;
}
cout << "countPos " << countPos << " " << n1 << " ";
hashMap.insert(make_pair(n1,countPos)); } for (vector<int> tmp : result) {//将数组转化为整数
int num = ;
int countP = ;
for (int i = ; i < tmp.size(); ++i) {
//cout << tmp[i] << " ";
if (i == ) {
num = tmp[i];
}
else {
cout << "///" << hashMap[tmp[i - ]];
countP += hashMap[tmp[i - ]];
num += tmp[i] * (pow(, countP));
} }
cout << endl;
cout << num << " ";
cout << "*************************" << endl;
if (minNum > num) {
minNum = num;
}
}
cout << minNum;
return minNum;
}
string PrintMinNumber(vector<int>& numbers) {
int result = permutation(numbers);
istringstream ss(result);
string s;
ss >> s;
return s;
}
int main() {
vector<int> numbers{ ,, };
cout << PrintMinNumber(numbers) << endl;
system("pause"); }

permutation计算最小数

2、编写排序函数,利用sort函数,编写定制函数进行排序。

sort函数介绍。cmp函数不能修改传进去的参数。借口string a,或者const string &a;

在类里面写定制函数的时候,记得需要在定制函数前面加上static,原因是: 在类的成员函数使用带谓词的sort()函数

原因:sort()函数接受二元谓词,但是在类内定义的myCompare函数作为成员函数,实际上有三个参数,this指针、m、n。 
解决方案: 
1、将myCompare()函数挪到类定义的外面,即改为非成员函数; 
2、将myCompare()函数定义为静态成员函数,没有this指针。 
3、将myCompare()函数定义为类的友元函数,但是此时必须在类外声明该函数,否则,即使在类内定义了该友元函数,该函数仍然是不可见的。

class Solution {
public:
static bool cmp(const string& a,const string& b){
string s1 = a + b;
string s2 = b + a;
return s1 < s2;
}
string PrintMinNumber(vector<int> numbers) {
string result;
if(numbers.size() == ){
return result;
}
vector<string> numString;
for(int Tmp : numbers){
numString.push_back(to_string(Tmp));
}
sort(numString.begin(),numString.end(),cmp);
for(string tmp : numString){
result.append(tmp);
}
return result;
} };

上面的方法需要证明:

组合数学里面的自反性,对称性,传递性。

剑指offer 把数组排成最小的数 atoi和itoa,pow的更多相关文章

  1. [剑指Offer]45-把数组排成最小的数

    题目链接 https://www.nowcoder.com/practice/8fecd3f8ba334add803bf2a06af1b993?tpId=13&tqId=11185&t ...

  2. 剑指Offer——把数组排成最小的数

    题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 分析: 排 ...

  3. 用js刷剑指offer(把数组排成最小的数)

    题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 思路 对ve ...

  4. leetcode 179. Largest Number 、剑指offer33 把数组排成最小的数

    这两个题几乎是一样的,只是leetcode的题是排成最大的数,剑指的题是排成最小的 179. Largest Number a.需要将数组的数转换成字符串,然后再根据大小排序,这里使用to_strin ...

  5. 剑指offer--32.把数组排成最小的数

    用to_string()将整形转化为字符串,对字符串进行比较 --------------------------------------------------------------------- ...

  6. 剑指Offer-39.把数组排成最小的数(C++/Java)

    题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 分析: 将数组 ...

  7. 4-剑指offer: 把数组排成最小的数

    题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 代码: cl ...

  8. 剑指Offer31 把数组排成最小的数

    /************************************************************************* > File Name: 31_SortAr ...

  9. 剑指Offer 旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...

随机推荐

  1. php之新的开始---php的相关及其环境搭建

    写在前面:首先,感谢“奇矩”给的这次机会,不论结果如何,我都会尽我最大的努力! 在今晚之前,如果说,我与php的接触是停留在知道的阶段,那今晚过后,我想我算是认识了php.php作为一门编程语言,已经 ...

  2. SpringBoot+MyBatis+PageHelper分页无效

    POM.XML中的配置如下:<!-- 分页插件 --><!-- https://mvnrepository.com/artifact/com.github.pagehelper/pa ...

  3. day46_Webservice学习笔记_02

    一.回顾昨天所学 什么是webservice?    什么是远程调用技术?答:系统和系统之间的调用,从远程系统当中获取业务数据.    Webservice是web服务,他是用http传输SOAP协议 ...

  4. SPOJ QTREE Query on a Tree【树链剖分模板题】

    树链剖分,线段树维护~ #include <cstdio> #include <cstring> #include <iostream> #include < ...

  5. idea配置jdk,maven,tomcat

    1.idea配置jdk  2.idea配置maven  3.idea配置tomcat

  6. ANSYS 非线性材料模型简介1 ---常用弹塑性模型

    目录 1. 材料非线性 2. 三个准则 2.1 屈服准则 2.2 流动准则 2.3 强化准则 3. 常用弹塑性模型 3.1 双线性等向强化 3.2 多线性等向强化 3.3 非线性等向强化 3.4 双线 ...

  7. 基于通用二进制方式安装MySQL-5.7.24(比源码安装MySQL快许多)及破密码

    确保系统中有依赖的libaio软件 yum -y install libaio 使用wget命令下载mysql-5.7.24软件包 wget http://mirrors.sohu.com/mysql ...

  8. python3 linux

    记录了Linux 安装python3.7.0的详细过程,供大家参考,具体内容如下 我这里使用的时centos7-mini,centos系统本身默认安装有python2.x,版本x根据不同版本系统有所不 ...

  9. redis requires Ruby version >= 2.2.2 系统默认 ruby 版本过低,导致 Redis 接口安装失败

    安装 Redis 接口时异常 ,系统 ruby 版本过低 ! 输入命令 " gem install redis " 出现 " ERROR:  Error installi ...

  10. Spring中@MapperScan注解

    之前是,直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,麻烦. 通过使用@MapperScan可以指定要扫描的Mapper类的包的路径,比如: @Sp ...