欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

每天一道leetecode:6、字符串转换整数(atoi)(medium)

程序员文章站 2022-07-14 07:57:42
...

为什么略去了4、5题呢,真的是血崩!!!!

第四题动态规划。。。。。。。。

第五题找规律。。。。。。。。。

动态规划真不是我现在有时间去看的,找规律也没啥意义呀,算了算了,今天手写了贝叶斯也算是对算法的练习了,今天就做一道简单的medium题吧。。。哭哭

'''
1、丢弃开头空格
2、负号问题
3、无用字符忽略
4、整体无效不转换,输出0
'''
def myAtoi(str):
    is_null = 0
    is_lower = 0
    is_begin = 0
    s = ''

    for i in range(len(str)):

        # 如果遇到了空格
        if str[i] == ' ':
            # 如果开始了
            if is_begin != 0:
                if s == '-' or s == '':
                    return 0
                else:
                    return s
            # 如果没开始
            if is_begin == 0:
                #print('aaa')
                continue

        # 如果遇到了不是数字的字符
        if ord(str[i])-48 > 9 or ord(str[i])-48 < 0:
            #print('bbb')
            # 如果遇到的是负号
            if str[i] == '-':
                # 如果还没开始
                if is_begin == 0:
                    # 记录是负号
                    is_lower = 1
                    # 开始了
                    is_begin = 1
                    s = s + str[i]
                # 如果开始了
                elif is_begin != 0:
                    if s == '-' or s == '':
                        return 0
                    else:
                        return s
            # 如果遇到的不是负号
            if str[i] != '-':
                if s == '-' or s== '':
                    return 0
                else:
                    return s

        # 如果遇到了是数字的字符
        if ord(str[i])-48 >= 0 and ord(str[i])-48 <= 9:
            s = s + str[i]
        #print('s:',s)

        len_s = len(s)
        if len_s == 0:
            return 0

        y = 0

        if s[0] == '-':
            global num
            num = 0
            for i in range(len_s - 1):

                k = len_s - i - 1
                p = i
                l = 1
                while p != 0:
                    p = p - 1
                    l = l * 10
                y += (ord(s[k]) - 48) * l
            num = -1*y
        else:

            for i in range(len_s):

                k = len_s - i - 1
                p = i
                l = 1
                while p != 0:
                    p = p - 1
                    l = l * 10
                y += (ord(s[k]) - 48) * l
            num = y


        if (num < -2147483648):
            return -2147483648
        elif (num > 2147483647):
            return 2147483647
    return num


print(myAtoi('42'))
print(myAtoi('   -42'))
print(myAtoi('4193 with words'))
print(myAtoi('words and 987'))
print(myAtoi('-91283472332'))
print(myAtoi('""'))

哈哈哈哈,照抄就错了,应该是编译器的问题,我的最后一个案例输出是0,可是leetecode输出竟然是3!!!

惊了!!!

每天一道leetecode:6、字符串转换整数(atoi)(medium)

懒得改了,如果有哪位大神知道怎么改,留言给小弟说一下好啦,小弟再ac了它,哈哈哈。

话说leetecode不能使用自定义函数吗?!!!!

一开始的代码感觉写的还不错呀。

'''
1、丢弃开头空格
2、负号问题
3、无用字符忽略
4、整体无效不转换,输出0
'''
def myAtoi(str):
    is_null = 0
    is_lower = 0
    is_begin = 0
    s = ''

    for i in range(len(str)):

        # 如果遇到了空格
        if str[i] == ' ':
            # 如果开始了
            if is_begin != 0:
                if s == '-' or s == '':
                    return 0
                else:
                    return s
            # 如果没开始
            if is_begin == 0:
                #print('aaa')
                continue

        # 如果遇到了不是数字的字符
        if ord(str[i])-48 > 9 or ord(str[i])-48 < 0:
            #print('bbb')
            # 如果遇到的是负号
            if str[i] == '-':
                # 如果还没开始
                if is_begin == 0:
                    # 记录是负号
                    is_lower = 1
                    # 开始了
                    is_begin = 1
                    s = s + str[i]
                # 如果开始了
                elif is_begin != 0:
                    if s == '-' or s == '':
                        return 0
                    else:
                        return s
            # 如果遇到的不是负号
            if str[i] != '-':
                if s == '-' or s== '':
                    return 0
                else:
                    return s

        # 如果遇到了是数字的字符
        if ord(str[i])-48 >= 0 and ord(str[i])-48 <= 9:
            s = s + str[i]
        #print('s:',s)
        num = str_to_int(s)
        if (num < -2147483648):
            return -2147483648
        elif (num > 2147483647):
            return 2147483647
    return num

def str_to_int(s):
    len_s = len(s)
    if len_s == 0:
        return 0
    y = 0
    if s[0] == '-':
        for i in range(len_s - 1):
            k = len_s - i - 1
            p = i
            l = 1
            while p!=0:
                p = p-1
                l = l * 10
            y += (ord(s[k])-48)*l
        return -1*y
    else:
        for i in range(len_s):
            k = len_s - i - 1
            p = i
            l = 1
            while p!=0:
                p = p-1
                l = l * 10
            y += (ord(s[k])-48)*l
        return y


print(myAtoi('42'))
print(myAtoi('   -42'))
print(myAtoi('4193 with words'))
print(myAtoi('words and 987'))
print(myAtoi('-91283472332'))

好啦,今天就到这里了,祝大家。额。今天不是什么节日,还是祝大家身体健康,万事如意啦!

相关标签: leetecode