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