507、完美数
题目描述:
对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。给定一个 正整数 n, 如果他是完美数,返回 True,否则返回False
示例:
输入: 28
输出: True
解释: 28 = 1 + 2 + 4 + 7 + 14
注意:输入的数字 n 不会超过 100,000,000. (1e8)
==solution:对这个数字进行遍历,如果i是它的一个因数,那么num/i也是它的一个因数,相当于把整个数字的长度缩短了一半来寻找,total,最终返回total是否等于num ==
import math
class Solution(object):
def checkprefectnum(self,num):
total = 1
for i in range(2, int(math.sqrt(num))+1):
if num % i == 0:
total += i + num/i
if i == num/i:
break
if total == num:
return True
else:
return False
solution = Solution()
print solution.checkprefectnum(28)
492、构造矩形
题目描述:
作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求:你设计的矩形页面必须等于给定的目标面积; 宽度 W 不应大于长度 L,换言之,要求 L >= W 。长度 L 和宽度 W 之间的差距应当尽可能小; 需要按顺序输出你设计的页面的长度 L 和宽度 W。
示例:
输入: 4
输出: [2, 2]
解释: 目标面积是 4, 所有可能的构造方案有 [1,4], [2,2], [4,1]。但是根据要求2,[1,4] 不符合要求; 根据要求3,[2,2] 比 [4,1] 更能符合要求. 所以输出长度 L为 2, 宽度 W 为 2。
== solution:最合适的是开平方根,只需要遍历1到平方根之间所有的数,然后取最右边的那一组值得逆序就好!==
import math
class Solution(object):
def TargetAera(self,aera):
num = int(math.sqrt(aera))
a = []
for i in range(1,num+1):
if aera % i ==0:
b = []
num_i = aera/i
b.append(i)
b.append(num_i)
a.append(b)
return a[len(a)-1][::-1]
solution = Solution()
print solution.TargetAera(4)
#方法二
class Solution(object):
def constructRectangle(self, area):
"""
:type area: int
:rtype: List[int]
"""
import math
width, val = 1, 0
for width_val in range(1, int(math.sqrt(area))+1):
if area % width_val == 0:
width = max(width_val, val)
val = width
return [area/width, width]