python3基础,将数字倒置(321转换为123、120转换为21 、 -1234转换为-4321 ),并添加测试用例

"""
Filename: solution.py 
Created on Thu Mar 28 11:06:08 CST 2019

将321转换为123、 120转换为21 、 -1234转换为-4321 ,数值介于-2**31和2**31-1否则结果为0

"""
# 方法一
class Solution1:
    def reverse(self, x: int) -> int:
        # 算法写在这里
        # ret = 0
        # 先将其用绝对值转换成字符串并转置成列表
        step_1 = list(reversed(str(abs(x))))
        # 判断x是正值还是负值
        if x >= 0:
            ret = int(''.join(step_1))
        else:
            ret = int('-' + str(int(''.join(step_1))))
        if ret > pow(2, 31)-1 or ret < -pow(2, 31):
            return 0
        return ret

# 方法二
class Solution2:
    def reverse(self, x: int) -> int:
        # 算法写在这里
        # ret = 0
        # 先取正
        x_ = abs(x)
        length = len(str(x_))
        # 存结果
        lis = []
        for i in range(length):
            # 取出每一位的值
            step_1 = str(x_ // 10 ** i % 10)
            lis.append(step_1)
        if x >=0:
            ret = int(''.join(lis))
        else:
            ret = int(('-' + str(int(''.join(lis)))))
        if ret > pow(2, 31)-1 or ret < -pow(2, 31):
            return 0
        return ret

# 方法三
class Solution3:
    def reverse(self, x: int) -> int:
        # 算法写在这里
        ret = 0
        # 或者 step_1 = x if x > 0 else -x
        step_1 = abs(x)
        while step_1 != 0:
            # 0*10 >> 0 乘
            # 123%10 >> 3 取余
            # 0+3 >> 0 相加
            # 123//10 >> 12 整除

            # 3*10 >> 30
            # 12%10 >> 2
            # 30+2 >> 32
            # 12//10 >> 1

            # 32*10 >> 320
            # 1%10 >> 1
            # 320+1 >> 321
            # 1//10 >> 0
            ret *= 10
            ret += step_1%10
            step_1 =  step_1 // 10

        ret = ret if x > 0 else -ret
        if ret > pow(2, 31)-1 or ret < -pow(2, 31):
            return 0
        return ret

# 方法四
class Solution4:
    def reverse(self, x: int) -> int:
        rev = str(abs(x))[::-1]
        sign = '' if x > 0 else '-'
        ret = int(''.join([sign, rev]))
        if ret > pow(2, 31)-1 or ret < -pow(2, 31):
            return 0
        return ret


# ===============================================================================
# Test
# ===============================================================================
test = {
    123: 321,
    -123: -321,
    120: 21,
    0: 0,
    -100: -1,
    1534236469: 0,

}

sol = Solution4()
for k, v in test.items():
    res = sol.reverse(k)

    print('-' * 80)
    print('Input:', k)
    print('Correct:', v)
    print('Output:', res)
    if res == v:
        print('Passed>>>^_^')
    else:
        print('ERROR:Wrong!!')

执行结果:

python3基础,将数字倒置(321转换为123、120转换为21 、 -1234转换为-4321 ),并添加测试用例_第1张图片

你可能感兴趣的:(python,Python练习题)