2042.检查句子中的数字是否递增(C语言)

LeetCode2042.检查句子中的数字是否递增

题目描述

句子是由若干个 token组成的一个列表,token间用单个空格分隔,句子没有前导或尾随空格。每个token要么是一个由数字0-9组成的不含前导零的正整数 ,要么是一个由小写英文字母组成的 单词

示例,“a puppy has 2 eyes 4 legs” 是一个由 7 个 token 组成的句子:“2” 和 “4” 是数字,其他像 “puppy” 这样的 tokens 属于单词。

给你一个表示句子的字符串 s ,你需要检查 s 中的 全部 数字是否从左到右严格递增(即,除了最后一个数字,s 中的 每个 数字都严格小于它 右侧 的数字)。
如果满足题目要求,返回 true ,否则,返回 false

提示:
3 <= s.length <= 200
s 由小写英文字母、空格和数字 0 到 9 组成(包含 0 和 9)
s 中数字 token 的数目在 2 和 100 之间(包含 2 和 100)
s 中的 token 之间由单个空格分隔
s 中至少有 两个 数字
s 中的每个数字都是一个 小于 100 的 正 数,且不含前导零
s 不含前导或尾随空格


解题方法/思路

解题方法:直接遍历字符串

变量设置:pre–前一个token的值 num-新token转化过来的十进制数

1.先遍历s判断每一个token是字母还是数字,

  • 字母:跳出,再判断下一个token
  • 数字:计算数字的值,因为数字是小于100的正数,且不含前导零 所以 num=num*10 +(s[i]- ‘0’)

2.判断下一个数是否为数字,若是则与pre进行比较,num比pre大则将num的值存入pre继续遍历下一个数字

3.num比pre小直接返回false,

4.遍历完毕符合所有num比pre大返回true


代码实现

ool areNumbersAscending(char * s){
    int pre = 0,num = 0;
   for(int i=0;s[i] != '\0';i++)
   {
       if(s[i] < '0' || s[i] >'9') //如果不是数字,直接跳出
            continue;
        num = num*10 + (s[i] - '0');    //计算数字值,是小于100的正数,不含前导零
        if(s[i+1]!='\0' && (s[i+1] >='0' && s[i+1]<='9'))   //判断下一个字符是否为数字
            continue;
        else
        {
            if(num > pre)
                pre = num;  
            else
                return false;
            num = 0;
        }
   }
    return true;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值