剑指offer「1」

剑指offer第一题
##1.解题步骤
对于该题,本题在于:通过题中给出的已知条件,可以找到两种解题方法:
#1.1解法1
使用结果=左边的乘积*右边的乘积
但存在两种特殊情况:
1):B[0]无左边的乘积
2):B[n-1]无右边的乘积
其余的可将其分为左右两边

# -*- coding:utf-8 -*-
class Solution:
    def multiply(self, A):
        # write code here
        B=[1]*len(A)
        n=len(A)
#解法,先计算出所有的矩阵数组
        for i in range(n):
#对A进行遍历
            if i==0:
                for l in range(1,n):
                    B[0]*=A[l]
            elif i==n-1:
                for m in range(0,n-1):
                    B[n-1]*=A[m]
            else:
# 前半边数据的额成绩为:B=A[0]*A[1]*...*A[i-1]#迭代的乘法,使用for循环
                f_result=1
                b_result=1
                for j in range(i):
                    f_result*=A[j]
#前半边数据的额成绩为:B=A[0]*A[1]*...*A[i-1]#迭代的乘法,使用for循环
                for k in range(i+1,n):
                    b_result*=A[k]
                B[i]=f_result*b_result
        return B

#1.2解法2
进行双重循环,不计算i=j的情况即可

class Solution:
    def multiply(self, A):
        # write code here
        #方法二:复杂度明显降低,当i==j时,A[i]将不参与运算
        n=len(A)
        B=[1]*n
        for i in range(n):
            for j in range(n):
                if i!=j:
                    B[j]*=A[i]
        return B
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值