lintcode入门篇十二

569. 各位相加

中文English

给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。

样例

例1:

输入:
num=38
输出:
2
解释:
过程如下: 3 + 8 = 11, 1 + 1 = 2. 因为 2 只有一个数字,返回 2.

例2:

输入:
num=9
输出:
9
解释:
9<10,返回 9.

挑战

你可以不用任何的循环或者递归算法,在 O(1) 的时间内解决这个问题么?

输入测试数据 (每行一个参数)如何理解测试数据?

 

class Solution:
    """
    @param num: a non-negative integer
    @return: one digit
    """
    def addDigits(self,num):
        while True:
            if len(str(num)) == 1:
                return num
            num = self.getsum(num)
    def getsum(self,num):
        res= 0
        for n in str(num):
            res += int(n)
        return res   

 

607. 两数之和 III-数据结构设计

中文English

设计b并实现一个 TwoSum 类。他需要支持以下操作:add 和 find
add -把这个数添加到内部的数据结构。
find -是否存在任意一对数字之和等于这个值

样例

样例 1:

add(1);add(3);add(5);
find(4)//返回true
find(7)//返回false

第一种方法:列表的方式,time limted 超出时间限制,不可取
class TwoSum:
    """
    @param number: An integer
    @return: nothing
    """
    def __init__(self):
        self.list = []
    def add(self, number):
        # write your code here
        self.list.append(number)
        return self.list

    """
    @param value: An integer
    @return: Find if there exists any pair of numbers which sum is equal to the value.
    """
    def find(self, value):
        # write your code here
        for i in range(len(self.list)):
            find_num =  value - self.list[i] 
            ##如果符合条件的话,要求:前提,第二个数在self.list里面,但是又得区分是不是同一个索引的数字
            #1.如果find_num ==value,判断是否存在多个该数值,如果count>1,则返回True
            #2.如果find_num != value,直接返回True
            #否则返回False,循环完毕,没有找到符合条件的
            print(find_num)
            if find_num in self.list and (self.list.count(find_num)>1 or find_num != self.list[i] ):
                return True
        return False

第二种方法:字典的方式,可取,{5:6,1:5}

class TwoSum:
    """
    @param number: An integer
    @return: nothing
    """
    def __init__(self):
        self.dic ={}
    def add(self, number):
        # write your code here
        if number not in self.dic:
            self.dic[number] = 1 
        else:
            self.dic[number] += 1 
        

    """
    @param value: An integer
    @return: Find if there exists any pair of numbers which sum is equal to the value.
    """
    def find(self, value):
        # write your code here
        for column in self.dic:
            find_num = value -column
            if find_num in self.dic and (self.dic[find_num]>1 or find_num != column):
                return True
        return False

 



posted @ 2020-03-14 04:45  风不再来  阅读(120)  评论(0编辑  收藏  举报