当前位置: 首页 > news >正文

爱写作网站免费个人网站2018

爱写作网站,免费个人网站2018,3d报价网站开发,网络营销的含义有哪些文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 回溯 二【题目难度】 困难 三【题目编号】 679.24 点游戏 四【题目描述】 给定一个长度为4…

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 回溯

二【题目难度】

  • 困难

三【题目编号】

  • 679.24 点游戏

四【题目描述】

  • 给定一个长度为4的整数数组 cards 。你有 4 张卡片,每张卡片上都包含一个范围在 [1,9] 的数字。您应该使用运算符 ['+', '-', '*', '/'] 和括号 '('')' 将这些卡片上的数字排列成数学表达式,以获得值24
  • 你须遵守以下规则:
    • 除法运算符 '/' 表示实数除法,而不是整数除法。
      • 例如, 4 /(1 - 2 / 3)= 4 /(1 / 3)= 12
    • 每个运算都在两个数字之间。特别是,不能使用 “-” 作为一元运算符。
      • 例如,如果 cards =[1,1,1,1] ,则表达式 “-1 -1 -1 -1” 是 不允许 的。
    • 你不能把数字串在一起
      • 例如,如果 cards =[1,2,1,2] ,则表达式 “12 + 12” 无效。
  • 如果可以得到这样的表达式,其计算结果为 24 ,则返回 true ,否则返回 false

五【题目示例】

  • 示例 1:

    • 输入: cards = [4, 1, 8, 7]
    • 输出: true
    • 解释: (8-4) * (7-1) = 24
  • 示例 2:

    • 输入: cards = [1, 2, 1, 2]
    • 输出: false

六【题目提示】

  • cards.length == 4
  • 1 <= cards[i] <= 9

七【解题思路】

  • 首先要读懂题意,搞清楚四种运算方式
  • 然后使用回溯解决该问题
    • 每次取出两个数字,进行相应的运算
    • 然后组成新的数组,该数组包括运算后的结果和剩下的数字
    • 然后递归重复进行运算
    • 如果最后发现满足24点的要求即可返回真,否则返回假
  • 有些细节需要注意:
    • 注意精度问题,因为是实数运算,所以需要使用浮点类型
    • 注意除法中的除数不能为零
    • 加法和乘法满足交换律,可以通过剪纸减少计算次数,从而提高效率
  • 最后返回结果即可
  • 具体细节可以参考下面的代码

八【时间频度】

  • 时间复杂度: O ( 1 ) O(1) O(1)
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
class Solution {// 目标值private static final double target = 24;// 误差private static final double deviation = 1e-6;// 四种运算,注意加和乘放在前两位,因为这两种运算满足交换律,方便后续处理private static final int add = 0;private static final int mul = 1;private static final int sub = 2;private static final int div = 3;public boolean judgePoint24(int[] cards) {// 将int数组转成double类型的ListList<Double> cardList = new ArrayList<>();for (int card : cards) {cardList.add((double)card);}// 返回最终结果return dfs(cardList);}// 使用回溯判断满足运算结果为24的情况private boolean dfs(List<Double> cards) {// 边界条件if (cards.size() == 0) {return false;}// 返回结果if (cards.size() == 1) {return Math.abs(cards.get(0) - target) < deviation;}// 任取数组中的两个数for (int i = 0; i < cards.size(); i++) {for (int j = 0; j < cards.size(); j++) {// 取得数不能相同if (i != j) {// 将剩下的数存到新的数组中List<Double> newCards = new ArrayList<>();for (int k = 0; k < cards.size(); k++) {if (k != i && k != j) {newCards.add(cards.get(k));}}// 开始根据四种运算对最外层循环取出的两个数进行运算并将运算结果放到新的数组中for (int l = 0; l < 4; l++) {// 剪枝,满足交换律的运算(比如加和乘)只运算一次,提高效率if (l < 2 && i > j) {continue;}// 加、乘、减、除四种运算double x = cards.get(i);double y = cards.get(j);if (l == add) {newCards.add(x + y);} else if (l == mul) {newCards.add(x * y);} else if (l == sub) {newCards.add(x - y);} else if (l == div) {if (y < deviation) {continue;}newCards.add(x / y);}// 根据当前运算结果进行下一次运算if (dfs(newCards)) {return true;}// 回溯,开始使用下一种运算符进行运算newCards.remove(newCards.size() - 1);}}}}// 所有情况都没满足return false;}
}
  1. Python语言版
class Solution:def judgePoint24(self, cards: List[int]) -> bool:# 目标值target = 24# 误差deviation = 1e-6# 四种运算,注意加和乘放在前两位,因为这两种运算满足交换律,方便后续处理add = 0mul = 1sub = 2div = 3# 使用回溯判断满足运算结果为24的情况def dfs(cards):# 边界条件if not cards:return False# 返回结果if len(cards) == 1:return abs(cards[0] - target) < deviation# 任取数组中的两个数for i, x in enumerate(cards):for j, y in enumerate(cards):# 取得数不能相同if i != j:# 将剩下的数存到新的数组中new_cards = list()for k, z in enumerate(cards):if k != i and k != j:new_cards.append(z)# 开始根据四种运算对最外层循环取出的两个数进行运算并将运算结果放到新的数组中for l in range(4):# 剪枝,满足交换律的运算(比如加和乘)只运算一次,提高效率if l < 2 and i > j:continue# 加、乘、减、除四种运算if l == add:new_cards.append(x + y)elif l == mul:new_cards.append(x * y)elif l == sub:new_cards.append(x - y)elif l == div:if abs(y) < deviation:continuenew_cards.append(x / y)# 根据当前运算结果进行下一次运算if dfs(new_cards):return True# 回溯,开始使用下一种运算符进行运算new_cards.pop()# 所有情况都没满足return False# 返回最终结果return dfs(cards)
  1. C语言版
// 目标值
#define target 24.0
// 误差
#define deviation 1e-6
// 四种运算,注意加和乘放在前两位,因为这两种运算满足交换律,方便后续处理
#define add 0
#define mul 1
#define sub 2
#define div 3// 使用回溯判断满足运算结果为24的情况
bool dfs(double* cards, int size)
{// 边界条件if (size == 0){return false;}// 返回结果if (size == 1){return fabs(cards[0] - target) < deviation;}// 任取数组中的两个数for (int i = 0; i < size; i++){for (int j = 0; j < size; j++){// 取得数不能相同if (i != j){// 将剩下的数存到新的数组中double* newCards = (double*)malloc(sizeof(double) * (size - 1));int newCardsIndex = 0;for (int k = 0; k < size; k++){if (k != i && k != j){newCards[newCardsIndex++] = cards[k];}}// 开始根据四种运算对最外层循环取出的两个数进行运算并将运算结果放到新的数组中double x = cards[i];double y = cards[j];for (int l = 0; l < 4; l++){// 剪枝,满足交换律的运算(比如加和乘)只运算一次,提高效率if (l < 2 && i > j){continue;}if (l == add){newCards[newCardsIndex] = x + y;}else if (l == mul){newCards[newCardsIndex] = x * y;}else if (l == sub){newCards[newCardsIndex] = x - y;}else if (l == div){if (fabs(y) < deviation){continue;}newCards[newCardsIndex] = x / y;}// 根据当前运算结果进行下一次运算,并隐含回溯,开始使用下一种运算符进行运算if (dfs(newCards, newCardsIndex + 1)){free(newCards);return true;}}}}}// 所有情况都没满足return false;
}bool judgePoint24(int* cards, int cardsSize)
{// 将int数组转成double类型的数组double* cardList = (double*)malloc(sizeof(double) * cardsSize);for (int i = 0; i < cardsSize; i++){cardList[i] = (double)cards[i];}// 返回最终结果bool res = dfs(cardList, cardsSize);free(cardList);return res;
}

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. Python语言版
    在这里插入图片描述

  3. C语言版
    在这里插入图片描述

http://www.yayakq.cn/news/628625/

相关文章:

  • 网站怎么优化自己免费株洲网络推广
  • 模板建站源码wordpress文章html
  • 玉山县建设局网站上海谷歌seo
  • jsp小型网站开发代码无锡网站制作平台
  • 住房和城乡建设局部网站建e网站官网案例
  • 网站开发工具的浙江省住房和城乡建设厅网站打不开
  • 山东建设部网站芜湖网站备案咨询电话
  • 艾宗建设计公司网站全自动在线网页制作
  • 狮山公司网站建设做网站建设找哪家好
  • 建设厅网站企业诚信分值门户网站建设和管理情况
  • 公司网站的实例自动跳转手机网站
  • 湘潭学校网站建设 磐石网络第一dw做网站背景音乐
  • 美工做的好的网站保定关键词优化软件
  • 建设网站和备案网站的制作成品
  • 台州网站排名外包wordpress升级失败
  • 网站页面和图片设计张家港网站网络公司
  • 建设新网站征求意见刚开始做网站要传数据库吗
  • 网站安全建设需求分析报告济南百度竞价
  • 如何做自己的网站系统怎么用手机免费下载1688视频
  • 做一个国外的网站重庆网站制作权威乐云践新
  • 现在pc端网站开发用的什么技术湖北专业网站建设维修电话
  • 凡科做网站在百度能看见吗可以做任务的创意设计网站
  • 张槎网站建设制作手机制作网站app
  • 普陀做网站公司彩票网站建设古大学
  • 深圳品牌网站推广公司电子商务网站建设课设
  • 新建茶叶网站文章内容建设棋牌类网站设计建设
  • 陕西做网站电话装饰工程公司属于什么行业
  • 广西建设监理协会官方网站网站数据库怎么建立
  • 溧阳常州做网站美观网站建设哪家好
  • 中企动力做网站5个月了北京专业制作网站