2022-04-23:给定一个长度为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 。
输入: cards = [4, 1, 8, 7]。
输出: true。
解释: (8-4) * (7-1) = 24。
力扣679. 24 点游戏。

答案2022-04-23:

自然智慧,暴力尝试。可利用原数组空间。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
cards := []int{1, 1, 3, 4}
ret := judgePoint24(cards)
fmt.Println(ret)
} func judgePoint24(cards []int) bool {
if len(cards) == 0 {
return false
}
n := len(cards)
arr := make([]*Number, n)
for i := 0; i < n; i++ {
arr[i] = NewNumber(cards[i], 1)
}
return judge(arr, len(cards))
} // arr中,有效的范围arr[0...size-1] ... 再往右,都无效了,不用看了!
func judge(arr []*Number, size int) bool {
if size == 1 {
return arr[0].numerator == 24 && arr[0].denominator == 1
}
for i := 0; i < size; i++ {
for j := i + 1; j < size; j++ {
inum := arr[i]
jnum := arr[j]
arr[j] = arr[size-1]
arr[i] = add(inum, jnum)
if judge(arr, size-1) {
return true
}
arr[i] = minus(inum, jnum)
if judge(arr, size-1) {
return true
}
arr[i] = minus(jnum, inum)
if judge(arr, size-1) {
return true
}
arr[i] = multiply(inum, jnum)
if judge(arr, size-1) {
return true
}
arr[i] = divide(inum, jnum)
if arr[i] != nil && judge(arr, size-1) {
return true
}
arr[i] = divide(jnum, inum)
if arr[i] != nil && judge(arr, size-1) {
return true
}
arr[i] = inum
arr[j] = jnum
}
}
return false
} type Number struct {
numerator int
denominator int
} func NewNumber(n, d int) *Number {
ans := new(Number)
ans.numerator = n
ans.denominator = d
return ans
} func add(a, b *Number) *Number {
return simple(a.numerator*b.denominator+b.numerator*a.denominator, a.denominator*b.denominator)
} func minus(a, b *Number) *Number {
return simple(a.numerator*b.denominator-b.numerator*a.denominator, a.denominator*b.denominator)
} func multiply(a, b *Number) *Number {
return simple(a.numerator*b.numerator, a.denominator*b.denominator)
} func divide(a, b *Number) *Number {
if b.numerator == 0 {
return nil
} else {
return simple(a.numerator*b.denominator, a.denominator*b.numerator)
}
} func simple(up, down int) *Number {
if up == 0 {
return NewNumber(0, 1)
}
gcd0 := abs(gcd(up, down))
return NewNumber(up/gcd0, down/gcd0)
} func abs(a int) int {
if a < 0 {
return -a
} else {
return a
}
} func gcd(a, b int) int {
if b == 0 {
return a
} else {
return gcd(b, a%b)
}
}

执行结果如下:


左神java代码

2022-04-23:给定一个长度为4的整数数组 cards 。你有 4 张卡片,每张卡片上都包含一个范围在 [1,9] 的数字。您应该使用运算符 [‘+‘, ‘-‘, ‘*‘, ‘/‘] 和括号 ‘的更多相关文章

  1. java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}

    /** * 小米关于小米笔试题 数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = * input数组中,除了input[i] 之外的 ...

  2. 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。-----力扣

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...

  3. 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,

    转自:http://www.cnblogs.com/ranranblog/p/5845010.html 风口之下,猪都能飞.当今中国股市牛市,真可谓“错过等七年”. 给你一个回顾历史的机会,已知一支股 ...

  4. Day_09【常用API】扩展案例1_程序中使用一个长度为3的对象数组,存储用户的登录名和密码……

    需求说明:实现用户注册.登陆功能: 1.程序中使用一个长度为3的**对象数组**,存储用户的登录名和密码: 例如如下格式: 登录名 密码 生日 爱好 zhangsan 1111 1998-03-15 ...

  5. 【云计算】K8S DaemonSet 每个node上都运行一个pod

    Kubernetes容器集群中的日志系统集成实践 Kubernetes是原生的容器编排管理系统,对于负载均衡.服务发现.高可用.滚动升级.自动伸缩等容器云平台的功能要求有原生支持.今天我分享一下我们在 ...

  6. 产生一个长度为100的int数组,并向其中随机插入1-100,不能重复

    ]; ArrayList myList=new ArrayList(); Random rnd=new Random(); ) { ,); if(!myList.Contains(num)) myLi ...

  7. 在排序数组中查找元素的第一个和最后一个位置(给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。)

    示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出 ...

  8. C# 一个长度为100的int数组,插入1-100的随机数,不能重复,如何写

    int[] intArr = new int[100]; ArrayList myList = new ArrayList(); Random rnd = new Random(); while (m ...

  9. LeetCode 周赛 342(2023/04/23)容斥原理、计数排序、滑动窗口、子数组 GCB

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 前天刚举办 2023 年力扣杯个人 SOLO 赛,昨天周赛就出了一场 Easy - Ea ...

  10. byte和长度为8的boolean数组互相转换

    由于byte是一个8位字节 所以可以用它来存放数组为8的boolean数组,这些在通信协议会经常用到.这里给出一个java代码对其互相转换的. package com.udpdemo.test2; i ...

随机推荐

  1. 【Leetcode】 剑指offer:字符串(简单)--Day03

    剑指 Offer 05. 替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 逐字符遍历原字符串,遍历过程中对存放结果的字符串分情况更新. class Solu ...

  2. MarkDown基本用法学习

    一级标题 语法:# +内容 二级标题1 语法:## +内容 二级标题2 三级标题 语法:### +内容 字体 加粗 语法:** +内容+ **(中间无空格) 效果:粗体 斜体 语法 * +内容+ *( ...

  3. KLatexformula - MathType在Mac上的替代品

    KLatexformula - MathType alternative for MAC 1. KLatexformular 好用! 买了Mac, 升级了系统, MathType安装不了, 寻寻觅觅- ...

  4. HGD1-LSP-函数集-网络整理

    CAD LSP函数集 header

  5. 数制、ip地址及子网

    一.数制 数制:计数的方法,指用一组固定的符号和统一的规则表示数值的方法 数位:指数字符号在一个数中所处的位置 基数:指在某种进制计数中,数位上所能使用的数字符号的个数 位权:指在某种进制计数中,数位 ...

  6. Python中列表、元组、字典的区别

    列表: 列表是一种数据结构,每一个元素对应一个值.例如:list=['a','b','c'] 访问列表数据通过下标的方式来进行数据访问,list[下标] list.append(i)  添加数据 de ...

  7. 归一化,正则化,标准化,dropout的联系与区别

    归一化(Normalization)是指将数据缩放到一定范围内,一般是将数据映射到[0,1]或[-1,1]之间.这样可以避免不同特征的数值差异过大而导致的训练困难,同时也有助于加快梯度下降的收敛速度. ...

  8. Javaweb学习笔记第十弹

    本章存在的意义,大概就是为了回顾一下被遗忘不久的html了 HTML:超文本标记语言(不区分大小写,语法较为松散,但建议书写时规范一些) HTML标签由浏览器来解析 标签展示图片 具体详情也可以去参考 ...

  9. 天翼网关如何启用FTP服务器?

    首先将U盘连接光猫(天翼网关),然后在浏览器或者FTP软件连接.FTP地址例如:ftp://192.168.1.1 用户名和密码一般为你的路由器管理页面也就是192.168.1.1页面的登录名和密码.

  10. Django笔记九之model查询filter、exclude、annotate、order_by

    在接下来四五篇笔记中,将介绍 model 查询方法的各个细节,为我们的查询操作提供各种便利. 本篇笔记将介绍惰性查找.filter.exclude.annotate等方法,目录如下: 惰性查找 fil ...