832. 统计负数
给一个横向排序的且纵向也排序的的的矩阵, 问里面有几个负数
注意事项
输入的矩阵大小为,,。
为了约束程序的时间复杂度,你的程序将会运行次
样例
Given mat =
return.
第一列计数,寻找小于0的数,
count =
depth =len(nums)
width =len(nums[])
foriinrange(depth):
ifnums[i][]
如果某行第一个数小于0,则在该行统计小于0的数的个数。
forjinrange(width):
ifnums[i][j]
count+=1
运行结果:
代码:
729. 阶乘除法的最后一位数
给出两个数和, 其中. 我们需要计算结果 F 的最后一位数是什么, 其中F =(1
样例
只看最低位,如果A与B相差大于等于10,则B*(B-1)*(B-2)*...*(A+2)*(A+1)*A,中间必定有1个数尾数为0,计算结果F的尾数必为0,无论之后再乘什么都不会变化。
标记最低位factor初始值为1,value初始值为B,B的最低位乘以factor,保留最低位为factor,遇到factor为0时退出,或者直至value为A+1结束。
factor=1
value = B
whilevalue> A:
factor=((value%10)*factor)%10
ifint(factor)==:
returnint(factor)
value-=1
returnint(factor)
运行结果:
代码:
655. 大整数加法
以字符串的形式给出两个非负整数和,返回和的和。
注意事项
num1 和 num2 的长度都小于5100。
num1 和 num2 都只包含数字 0-9。
num1 和 num2 都不包含任何前导零。
您不能使用任何内置的BigInteger库内的方法或直接将输入转换为整数。
样例
给定 num1 =,num2 =
返回
思路跟昨天做的加1一致,判断每一位相加是否有进位。
结果字符串,取num1和num2长度,将2个数字转化为列表。
resultstr = []
numlist1 =list(num1)
numlist2 =list(num2)
length1 =len(numlist1)
length2 =len(numlist2)
判断哪个数长度较小(如果相同则无所谓了):
iflength1 > length2:
minlength = length2
else:
minlength = length1
两个数的列表都是最高位在前,将列表倒序,从最低位开始加,方便操作,进位先设置为0:
numlist1.reverse()
numlist2.reverse()
promotion =
对于两数中较短一个,先计算minlength长度的和:
如果某一位两数该位+进位之和小于10,则结果字符串加三数之和的字符,进位设置为0;
如果某一位三个元素之和大于9,则存在进位,结果字符串加三数之和对10求余的结果转字符,进位设置为1。
foriinrange(,minlength):
ifint(numlist1[i]) +int(numlist2[i]) + promotion
resultstr.append(str(int(numlist1[i]) +int(numlist2[i]) + promotion))
promotion =
elifint(numlist1[i]) +int(numlist2[i]) + promotion >9:
resultstr.append(str((int(numlist1[i]) +int(numlist2[i]) + promotion) %10))
promotion =1
如果length1>length2,对于length2+1到length1长度的num1,计算就回到了之前的加1,promotion沿用上面的结果,
如果数字小于9、进位为1,设置进位为0,结果添加数字+1转字符,
如果进位为0,结果添加原数字字符,进位还是0,不变,
如果数字为9,进位为1,结果添加0,进位还是1,不变。
iflength1 > length2:
foriinrange(minlength,length1):
ifint(numlist1[i])
promotion =
resultstr.append(str(int(numlist1[i]) +1))
elifpromotion ==:
resultstr.append(numlist1[i])
elifint(numlist1[i]) ==9andpromotion ==1:
resultstr.append('0')
如果最终进位为1,结果再加一个1。
ifpromotion ==1:
resultstr.append('1')
计算结束,将结果倒序,高位在前低位在后,将结果转化为字符串。
resultstr.reverse()
result ="".join(resultstr)
运行结果:
代码:
本来是想看看阶乘这个题的,结果还要先实现了大整数加法,明天继续看大整数乘法,想了想,大整数乘法跟阶乘应该是同样的题目。
领取专属 10元无门槛券
私享最新 技术干货