画解数据结构1.1线性枚举之二维数组 字符串强转数字

第一题

 

先排序,后双指针,如相等就插入,双指针++,不相等就小的++

第二题

void swap(char*a,char*b)
{
    char temp=*a;
    *a=*b;
    *b=temp;
}
int cmp(const void*a, const void*b)
{
    return *((char*)b)-*((char*)a);//从大到小
}
int maximumSwap(int num){
    int m;
if(num==0)
{
    return 0;
}
char str0[16]={0};
char str[16]={0};
sprintf(str0,"%d",num);
sprintf(str,"%d",num);//字符串强转
int len=(int)strlen(str);
qsort(str,len,sizeof(char),cmp);//str为标准答案
for(int i=0;i<len;i++)
{
if(str[i]!=str0[i])
{
    for(int j=0;j<len;j++)
    {
        if(str[i]==str0[j])
        {
            m=j;
            break;
        }
    }//swapstr0[i]和[j]
swap(&(str0[i]),&(str0[m]));
    break;
}
}
return atoi(str0);
}

思路:先将数字强转成字符串sprintf(str0,"%d",num)

用cmp将str降序排序为最佳标准答案,从头开始遍历,看目前字符串str0与str哪一位不相等,就在原先的字符串中从后往前遍历查找这一位,并在原先字符串中将其交换,随后将字符串转成int撒呼出atoi(str0)

知识点:

1.字符串强转

sprintf(str,"%d",num)

2.对象为char的cmp排序

int cmp(const void*a,const void*b)
{
return *((char*)a)-*(char*)b;
}

3.对象为char的swap

void swap(char *a,char *b)
{
char temp=*a;
*a=*b;
*b=temp;
}

4.字符串转成数字

atoi(str)

第三题

 

 暴力枚举左右边界,记录最大值最小值,并+=sum

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值