• 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


  • 相关阅读:
    js:值类型/引用类型/内存回收/函数传值
    JS学习计划
    起点
    哈夫曼压缩/解压缩(控制台,C++)
    二维数组作为函数参数传递(C++)
    二级指针和指针引用函数传参(C++)
    学生管理系统(C++,控制台,文件读取,姓名排序)
    C++的getline()和get()函数
    二叉排序树节点的删除(C++,算法导论),前中后序遍历(递归/非递归,栈实现),按层次遍历(队列实现)
    QT程序打包成EXE
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12490380.html
Copyright © 2020-2023  润新知