题目描述
思路
顺序遍历字符串,遍历过程直接算出x的系数(coefficient),以及另外一个常数(value)
。
借用=
切割两个字符串,整体分成左右两部分处理,因为符号不一样。
字符串处理的时候有以下情况:
- 只有x:更新系数
coefficient
- “+”或者“-”:更新符号标识符
curSign
- 数字
- 全是数字:
更新value
,遇到+或-时进行下一步处理 - 数字后面有x:
更新系数coefficient
,接着进行下一步处理
- 全是数字:
补充
- 全局变量置零,要不然后台多个连续用例过不了
Number( )
,将参数转化成数字isNaN( )
, 不是数字则返回 true,是数字类型则返回 false
AC代码
全注释
/**
* @param {string} equation
* @return {string}
*/
let coefficient=0;//x的系数
let value =0;
var solveEquation = function(equation) {
//全局变量置零,要不然后台多个连续用例过不了
coefficient=0;
value = 0;
//等号左边一组,等号右边一组
let array = equation.split("=");
parse(array[0],1);
parse(array[1],-1);
if(coefficient==0)
return value==0?"Infinite solutions":"No solution";
else
return "x="+(-value/coefficient);
};
var parse= function (str,sign){
i=0;
curSign=1;
while(i<str.length){
//处理单个x
if(str[i]=='x'){
coefficient+=sign*curSign;
i++;
}
//处理+号,改变下一次运算的正负标识符curSign
else if(str[i]=='+'){
curSign=1;
i++;
}
//处理-号,改变下一次运算的正负标识符curSign
else if(str[i]=='-'){
curSign=-1;
i++;
}
//处理数字
else{
let num=0;
//循环遍历所有数字并且存储
while(i<str.length&&!isNaN(Number(str[i]))){
num=num*10+Number(str[i])
i++;
}
//当数字后面是x时
if(str[i]=='x'){
coefficient+=num*curSign*sign;
i++;
}
//当数字后面时+或者-时
else
value+=num*curSign*sign;
}
}
}