将数组重新排序以构造最小值

给定一个整数数组,请将其重新排序,以构造最小值。

注意事项

The result may be very large, so you need to return a string instead of an integer.

样例

给定 [3, 32, 321],通过将数组重新排序,可构造 6 个可能性数字:

3+32+321=332321

3+321+32=332132

32+3+321=323321

32+321+3=323213

321+3+32=321332

321+32+3=321323

其中,最小值为 321323,所以,将数组重新排序后,该数组变为 [321, 32, 3]。

挑战

在原数组上完成,不使用额外空间。

标签

数组

code

class Solution {
public:
/**
* @param nums n non-negative integer array
* @return a string
*/ void transferToString(string &result,int number){
if(number<10) {
result+=('0'+number);
return;
}
int temp=number;
transferToString(result,number/10);
result+=('0'+temp);
} bool compare(int num1,int num2){
string com1,com2; if(num1==0)
com1+=('0'+num1); while(num1) {
com1+=('0'+num1);
num1/=10;
}
if(num2==0)
com2+=('0'+num2); while(num2) {
com2+=('0'+num2);
num2/=10;
} int len1=com1.size(),len2=com2.size(); int i,j;
for(i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--) {
if(com1[i]>com2[j])
return true;
else if(com1[i]<com2[j])
return false;
}
if(i==-1&&j==-1)
return false;
if(i==-1) {
while(j>=0) {
if(com2[j]<com2[j+1])
return true;
else if(com2[j]>com2[j+1])
return false;
else
j--;
}
return false;
}
else {
while(i>=0) {
if(com1[i]<com1[i+1])
return false;
else if(com2[i]>com2[i+1])
return true;
else
i--;
}
return false;
}
} string minNumber(vector<int>& nums) {
// Write your code here
string result;
if(nums.empty())
return result;
int n=nums.size();
int i;
for(i=0;i<n;i++) {
for(int j=0;j<n-i-1;j++) {
if(compare(nums[j],nums[j+1])) {
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
} }
for(i=0;i<nums.size();i++) {
if(result.empty()&&nums[i]==0)
continue;
else
transferToString(result,nums[i]);
}
if(result.empty())
result+='0';
return result;
}
};

LintCode-379.将数组重新排序以构造最小值的更多相关文章

  1. LintCode2016年8月22日算法比赛----将数组重新排序以构造最小值

    将数组重新排序以构造最小值 题目描述 给定一个整数数组,请将其重新排序,以构造最小值. 样例 给定[3,32,321],通过将数组重新排序,可构造6个可能性的数字: 3+32+321=332321 3 ...

  2. 给定数组a[N]构造数组b[N]

    转自:http://blog.csdn.net/wumuzi520/article/details/7841280 给定一个数组a[N],我们希望构造数组b [N], 其中b[j]=a[0]*a[1] ...

  3. js中关于一个数组中最大、最小值以及它们的下标的输出的一种解决办法

    今天在学习js中的数组时,遇到的输出一个数组中最大.最小值以及它们的下表,以下是自己的解决方法! <script type="text/javascript"> var ...

  4. Javascript获取数组中最大和最小值

    取出数组中最大值或最小值是开发中常见的需求,今天继续讲解如何获取javascript数组中最大和最小值. 1.排序法 首先我们给数组进行排序,可以按照从小到大的顺序来排,排序之后的数组中第一个和最后一 ...

  5. JavaScript学习:取数组中最大值和最小值

    在实际业务中有的时候要取出数组中的最大值或最小值.但在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最 ...

  6. Java-Runoob-高级教程-实例-数组:06. Java 实例 – 数组获取最大和最小值

    ylbtech-Java-Runoob-高级教程-实例-数组:06. Java 实例 – 数组获取最大和最小值 1.返回顶部 1. Java 实例 - 数组获取最大和最小值  Java 实例 以下实例 ...

  7. 使用JavaScript·求数组的最大值和最小值

    前言  在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法.   法一:其实利用 ...

  8. js获取数组中的最大值/最小值

    目录 前言 1. 使用Math的静态方法max/min 1.1 结合ES6的扩展运算符...使用 1.2 结合apply/call方法来使用 1.3 结合reduce来使用 2. 排序获取 2.1 只 ...

  9. C语言:对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。

    //对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. #include <stdio.h& ...

随机推荐

  1. 关于php中数字0与其他变量的相等判断

    在实践过程中,经常需要做`==`判断,有时候会把0当做false一样用,但是0和false在用来做比较的时候还是不一样的, false false==0 等于true false=='0' 等于tru ...

  2. 解决gradle下载慢的问题(转)

    问题一:新建项目下载gradle慢的问题 解决方法: 打开用户主目录 linux平台/home/用户名/.gradle windows平台c:\Users\用户名\.gradle macos平台/Us ...

  3. django模板的变量,标签,过滤器和自定义过滤器,注释

    模板的作用是计算并输出: {{ 变量}} 当模版引擎遇到点如book.title,会按照下列顺序解析: 1.字典book['title'] 2.先属性后方法,将book当作对象,查找属性title,如 ...

  4. c. 求阶乘和的方法(N的值不能太大)初学者

    #include <stdio.h> int main() { int n,i; int a=1;   //a设置为一个数的阶乘 int b;    //  b 设置为阶乘的和 for(i ...

  5. 中国大学MOOC-C程序设计(浙大翁恺)—— 素数和

    题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的 ...

  6. python之web架构

    一.web架构简介 web.py是一个轻量级Python web框架,它简单而且功能强大.web.py是一个开源项目.该框架由已故美国作家.Reddit联合创始人.RSS规格合作创造者.著名计算机黑客 ...

  7. zipaligin的使用介绍

    近来一直在做APK反编译和重编译的工作,针对一些apk需要放入一些相应的文件,(当然这里不涉及非法盈利,都是有合约的),在对一些包打包以后,发现可以通过一个叫做zipalign的工具进行优化,对于这个 ...

  8. Use GitHub Desktop to get GitHub projects

    Find the project's https git file in the home page of the project. e.g. https://github.com/PrismLibr ...

  9. java 多维数组转化为字符串

    int[][] a = {{1,2,3},{4,5,7}}; System.out.println(Arrays.deepToString(a)); Arrays.deepToString()此方法是 ...

  10. Charles使用及mock数据

    1.下载charles 3.9.2[破解版地址:https://download.csdn.net/my] 下方有一种方法可破解4.2以前的版本 // Charles Proxy License // ...