IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构与算法之LeetCode-640. 求解方程(数学模拟) -> 正文阅读

[数据结构与算法]数据结构与算法之LeetCode-640. 求解方程(数学模拟)

640. 求解方程 - 力扣(LeetCode)

  • factor表示变量的系数,val表示常量值
  • 使用系数sign1表示默认系数,解析到等号时,说明解析到等式右边的项,令sign1 = -1
  • 使用sign2表示项的符号,初识时sign2 = sign1 。解析到‘+’,‘-’,要么相应的更改sign2,使用number记录数字,valid表示number是否有效
  • 如果解析到变量,那么相应的更改factor
  • 如果解析到的是常量项,那么相应的更改val
  • 如果factor=0,说明变量x对方程无影响,然后判断val=0 是否成立,成立则说明方程有无数解,返回“Infinite solutions”否则返回“No solution”
  • 其他情况直接返回对应的整数解 x= - val / factor
/**
 * @param {string} equation
 * @return {string}
 */
var solveEquation = function(equation) {
    let factor = 0, val = 0;
    let index = 0, n = equation.length, sign1 = 1; // 等式左边默认系数为正
    while (index < n) {
        if (equation[index] === '=') {
            sign1 = -1; // 等式右边默认系数为负
            index++;
            continue;
        }

        let sign2 = sign1, number = 0;
        let valid = false; // 记录 number 是否有效
        if (equation[index] === '-' || equation[index] === '+') { // 去掉前面的符号
            sign2 = (equation[index] === '-') ? -sign1 : sign1;
            index++;
        }
        while (index < n && isDigit(equation[index])) {
            number = number * 10 + (equation[index].charCodeAt() - '0'.charCodeAt());
            index++;
            valid = true;
        }

        if (index < n && equation[index] === 'x') { // 变量
            factor += valid ? sign2 * number : sign2;
            index++;
        } else { // 数值
            val += sign2 * number;
        }
    }

    if (factor === 0) {
        return val === 0 ? "Infinite solutions" : "No solution";
    }
    return "x=" + (-val / factor);
};

const isDigit = (ch) => {
    return parseFloat(ch).toString() === "NaN" ? false : true;
}

执行结果:通过

执行用时:56 ms, 在所有 JavaScript 提交中击败了88.46%的用户

内存消耗:41.1 MB, 在所有 JavaScript 提交中击败了65.38%的用户

通过测试用例:59 / 59

const CHARS = '-+=x'
function solveEquation(equation){
  equation += '='
  let sign = 1,cur = 0,num = 0, k = 0, left = true, hasVal = false;
  for(let i=0i<equation.length;i++){
    const c = equation.charAt(i);
    if(CHARS.includes(c)){
      if(c == 'x'){
        if(!hasVal && cur == 0 ){
          cur =1;
        }
        k+= left? sign * cur : -sign*cur;
      }else{
        num -= left? sign*cur:-sign*cur;
      }
      cur = 0;
      hasVal = false;
    }
    
    switch(c){
      case '-':
        sign = -1;
        break
      case '+':
        sign = 1;
        break;
      case '=':
        sign = 1;
        left = false;
        break;
      case 'x':
        
        break;
      default:
        cur = cur * 10 +equation.charCodeAt(i) - '0'.charCodeAt(0)
        hasVal = true;
        break;
    }
    if(k == 0){
      return num!=0? "No solution" : "Infinite solutions";
    }
    return num%k == 0? 'x='+Math.floor(num/k):"No solution"
  }
}

参考链接

640. 求解方程 - 力扣(LeetCode)

求解方程 - 求解方程 - 力扣(LeetCode)

[[Python/Java/TypeScript/Go] 模拟 - 求解方程 - 力扣(LeetCode)](

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:31:09  更:2022-08-19 19:35:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:43:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码