博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python-offer
阅读量:2050 次
发布时间:2019-04-28

本文共 2382 字,大约阅读时间需要 7 分钟。

 

66

# -*- coding:utf-8 -*-'''剪绳子题目描述给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描述:输出答案。示例1输入复制8输出复制18'''class Solution:    def cutRope(self, number):        # write code here        if number < 2:            return 0        if number == 2:            return 1        if number == 3:            return 2        #DP矩阵-max矩阵        max_ls = [0,1,2,3]        #绳子大于3米,可以用动态规划的公式做,f(n)=f(i)*f(n-i)        #13 22 31        #14 23 32 41        #5/2+1        #4/2+1        for i in range(4,number+1):            max_1 = 0            for j in range(1,i/2+1):                temp = max_ls[j]*max_ls[i-j]                max_1 = max(max_1,temp)            max_ls.append(max_1)        return max_ls.pop()s = Solution()print(s.cutRope(8))

65

# -*- coding:utf-8 -*-'''机器人的运动范围地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?'''class Solution:    def movingCount(self, threshold, rows, cols):        # write code here        markmatrix = [False] * (rows * cols)        count = self.GetNum(threshold, rows, cols, 0, 0, markmatrix)        return count    #递归函数    def GetNum(self, threshold, rows, cols, row, col, markmatrix):        count = 0        #是否符合规定 符合就递归        if self.GetSum(threshold, rows, cols, row, col, markmatrix):            markmatrix[row * cols + col] = True            count = 1 + self.GetNum(threshold, rows, cols, row - 1, col, markmatrix) + \                    self.GetNum(threshold, rows, cols, row, col - 1, markmatrix) + \                    self.GetNum(threshold, rows, cols, row + 1, col, markmatrix) + \                    self.GetNum(threshold, rows, cols, row, col + 1, markmatrix)        return count    #判断条件    def GetSum(self, threshold, rows, cols, row, col, markmatrix):        if row >= 0 and row < rows and col >= 0 and col < cols and self.getDigit(row) + self.getDigit(                col) <= threshold and not markmatrix[row * cols + col]:            return True        return False    #数位之和大于k    def getDigit(self, number):        sumNum = 0        while number > 0:            sumNum += number % 10            number = number // 10        return sumNums = Solution()print(s.movingCount(40,40,18))

 

转载地址:http://lmgof.baihongyu.com/

你可能感兴趣的文章
C语言学习笔记(三)—— 数据和C
查看>>
Java编程思想(三)—— 操作符
查看>>
梦飞 —— 述:我只是一个普通农民家的孩子,但我有一个梦想
查看>>
图解HTTP(二)—— 简单的HTTP协议
查看>>
程序员的数学(四)—— 数学归纳法,如何征服无穷数列
查看>>
不是技术人员也能看懂云计算、大数据、人工智能
查看>>
图解HTTP(三)—— HTTP报文内的HTTP信息
查看>>
图解HTTP(四)—— 返回结果的HTTP状态码
查看>>
JavaWeb高级编程(五)—— 使用会话来维持HTTP状态
查看>>
Intellij IDEA使用(十五)—— 如何在IDEA中一个Tomcat启动多个项目和多个Tomcat启动多个项目
查看>>
图解HTTP(五)—— 与HTTP协作的Web服务器
查看>>
程序员的数学(五)—— 排列组合,解决计数问题的方法
查看>>
前后端分离实践(四)—— 使用vue-cli搭建前端展示层并用mock模拟测试数据
查看>>
前后端分离实践(六)—— 前端与后端在生产环境中的分离部署
查看>>
启航 —— 记 —— 第二次自考的反思:自考与自我改造的困境
查看>>
数据结构与算法(三)——线性表
查看>>
Java8学习笔记(一)—— 函数式编程的四个基本接口
查看>>
Java8学习笔记(二)—— Lambda表达式
查看>>
Java8学习笔记(三)—— Optional类的使用
查看>>
Java8学习笔记(四) —— Stream流式编程
查看>>