给定一个数组求里面数字拼在一起组成的最小数字

本文介绍了一种算法,用于将数组中的所有数字拼接成一个数,并找出所有可能组合中最小的那个。例如,对于数组{3, 32, 321}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

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

Code:

class Solution {
public:
    static bool compare( const string &st1,const string &st2){
        string s1 = st1+st2;
        string s2 = st2+st1;
        return s1<s2;
    }
    string PrintMinNumber(vector<int> numbers) {
         string result;
        if(numbers.size()<=0){
            return result;
        }
        vector<string> strNum;
        for(int i=0;i<numbers.size();i++ ){
           stringstream ss;
            ss<<numbers[i];
            string s = ss.str();
            strNum.push_back(s);
        }
        sort(strNum.begin(),strNum.end(),compare);
        
        for(int i=0;i<strNum.size();i++){
            result.append(strNum[i]);
        }
        return result;
    }
};

转载于:https://www.cnblogs.com/youpeng/p/10991845.html

### 如何在C++中确保数字以固定宽度4位输出 为了使每个数字占用固定的四位宽度,在C++中可以利用`iomanip`库中的`setw()`函数来设置输出字段的最小宽度。如果指定的宽度大于实际数值所需的显示宽度,则会在左侧填充空白字符;如果宽度小于所需宽度,会自动扩展以适应数值大小。 以下是具体实现方法: #### 实现代码示例 ```cpp #include <iostream> #include <iomanip> // 需要引入此头文件以使用 setw() using namespace std; int main() { int numbers[] = {7, 123, 89, 5678}; // 定义一组测试数字 for (const auto& num : numbers) { cout << setw(4) << num << " "; // 设置每列宽度为4,并依次输出数组中的数字 } return 0; } ``` 上述代码片段展示了如何通过循环逐一打印整型数组中的元素,同时保证每一个数字都占据四个字符的空间[^1]。需要注意的是,默认情况下,当设定宽度超出实际需时,额外空间会被空格填补且数值靠右排列。 对于更复杂的场景比如涉及不同类型的变量或者希望改变默认行为(如左对齐),还可以结合其他修饰符一起使用: - **调整对齐方式**: 使用 `std::left`, `std::right` 或者 `std::internal` 来控制内容相对于给定域宽的位置。 例如让前面例子里的所有项目均采用左对齐形式呈现: ```cpp for (const auto& num : numbers){ cout<< left << setw(4)<<num<<" "; } ``` 这里加入了`left`标志使得所有的数据项都会被放置在其分配区域内的最左侧位置上[^4]。 另外值得注意的一点是关于负号处理——假如存在负数的话,那么符号本身也会算作整体的一部分参与布局规划之中[^3]。 最后提醒一点就是虽然可以通过这种方式简单有效地完成基本任务但是针对特别严格的应用场合可能还需要考虑更多细节因素诸如千分位分隔符添加等问题则需借助第三方工具或自定义解决方案加以解决[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值