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. Linux系统常用运维命令汇总

    因为这段时间加入Java后台开发,所以对Java后台开发必会的Linux系统指令进行了熟悉这里进行汇总; tar 参数说明:-x: 解压 -z:有gzip属性 -v:显示所有过程 -f:文件名 -c: ...

  2. yaml服务部署示例

    apiVersion: apps/v1kind: Deploymentmetadata:  name: igirl  namespace: chaolai  labels:    app: igirl ...

  3. cookie,session,localStorage和sessionStorage

    cookies:存储于浏览器端的数据.可以设置 cookies 的Max-Age或者Expires到期时间,如果不设置时间,则在浏览器关闭窗口的时候会消失. session:存储于服务器端的数据.se ...

  4. 修改oracle数据库用户密码的方法

    WIN+R打开运行窗口,输入cmd进入命令行: 输入sqlplus ,输入用户名,输入口令(如果是超级管理员SYS的话需在口令之后加上as sysdba)进入sql命令行:    连接成功后,输入“s ...

  5. 【原】Django数据Model层总结

    vlaues - 单条记录 - <class 'dict'> 多条记录 - <class 'django.db.models.query.QuerySet'> vlaues_l ...

  6. JAVA 通过POI 模版,导出excel

    如有不足,欢迎指正,谢谢 ! 1.Maven引入  POI jar包.模版和结果文件.rar下载 <dependency> <groupId>org.apache.poi< ...

  7. iOS 根据域名查询 IP 地址

    在 iOS 开发中,如果需要知道网站的 IP 地址: #include <netdb.h> #include <arpa/inet.h> NSString *webSiteSt ...

  8. 洛谷 CF804B Minimum number of steps

    嗯... 题目链接:https://www.luogu.org/problemnew/show/CF804B 这道题没有什么技巧,只是一道找规律的题. 首先看到“ab”可以换成“bba”,所以首先要确 ...

  9. boot集成mybatis分页插件pagehelper

    导入依赖 <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter ...

  10. Python 基础之面向对象之异常处理

    一.认识异常 1.常用异常报错的错误类型 IndexError                索引超出序列的范围 KeyError                  字典中查找一个不存在的关键字 Na ...