LintCode题目(编号为顺序)

1.A+B问题
解法一:直接return a+b
解法二:通过位运算计算A+B

def add(a, b):
    if a==0:
        return b
    if b==0:
        return a
    else:
        sum=a^b
        j=(a&b)<<1
        return add(sum, j)
①忽略进位计算a+b    只有0,1或1,0时才为1    sum为计算两数的二进制异或结果
②计算进位结果   只有两个1时才进位   j为计算两数的二进制与结果
③将前两步结果相加,相加方式仍使用上述方法,直至有一个数字为0,返回另一个

2.尾部的零
设计一个算法,计算出n阶乘中尾部零的个数
方法1: ①首先计算一个数字的阶乘,得到结果。
②设计一个整除循坏(如下面while所示)假如数字不可以整除10,即尾部没有0 跳出循坏,假如可以整除10,则进入循环依次看是否可以整除100,1000… 整除位数每多一位,i+1
此方法算法复杂度较高,不能通过测试

#定义一个计算阶乘的函数(递归求阶乘):
def jie(n):
    if n == 1:
        return 1
    else:
        return n * jie(n - 1)
#定义一个计算阶乘的函数(循环求阶乘):
def jie(n):
    sum=1
    for i in range(1,n+1):
        sum =sum*i
    return sum
    
n = int(input("input"))
sum =jie(n)
i = 0          #初始化个数0
t = 10      
while sum % t == 0:               
    i = i + 1
    t = t * 10
print(i)

方法2:数字的阶乘可以写成一系列因子的乘积,尾部是0即因子2*5,故可直接数 这些因子中有多少个5
例如25的阶乘:因子有 1*5 2*5 3*5 4*5 5*5 ,因子5共出现6次。
数量即为: n/5+n/5/5+…n/5/5…/5

 def function(n):
        sum=0
        while (n/5):
            sum=sum+int(n/5)
            n=n/5
        return sum

37.反转一个3位整数
反转一个只有3位数的整数
解法:分别求出这个三位数的百位,十位,个位数字,再分别乘以不同位置的权重。

def function(number):
    x = int(number/100)
    y = int(number/10%10)
    z = int(number%10)
    return z*100+y*10+x

145.大小写转换
将一个字符由小写字母转换为大写字母
解法:字符都有对用的ASCII码值。先判断字符是大写还是小写字母,若是小写字母,则将其ASCII码值减去32,再重新转换为字符。反之加上32亦然。

    def function(character):
        if 'a'<=character<='z':
            return chr(ord(character)-32)
        if 'A'<=character<='Z':
            return chr(ord(character)+32)

454.矩阵面积
实现一个矩阵类Rectangle,包含如下的一些成员变量与函数:
1.两个共有的成员变量 width 和 height 分别代表宽度和高度。
2.一个构造函数,接受2个参数 width 和 height 来设定矩阵的宽度和高度。
3.一个成员函数 getArea,返回这个矩阵的面积。

class Rectangle(object):
    width = 0
    height = 0
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def getArea(self):
        return self.width*self.height
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值