• LintCode-379.将数组重新排序以构造最小值


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

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

    注意事项

    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;  
        }  
    };
  • 相关阅读:
    嵌入式Linux设备驱动编程(1):基础
    嵌入式Linux网络编程
    Linux进程间通信(5):消息队列
    Android网络通信(2):HTTP通信
    Android网络通信(3):Socket通信
    Android网络通信(5):WiFi
    Linux任务、进程和线程
    Android程序的安装和卸载
    Android网络通信(4):WebKit
    Android网络通信(1):Android网络基础
  • 原文地址:https://www.cnblogs.com/libaoquan/p/6807777.html
Copyright © 2020-2023  润新知