当前位置: 首页 > Web前端 > JavaScript

全栈求职面试算法题-数字输入框验证

时间:2023-03-27 02:03:52 JavaScript

原因是最近面试了一个web全栈开发工程师的职位。遇到一道算法题的时候,觉得是一个很考验自己分析能力的算法,在实践中有一定的作用,所以分享给大家一起讨论。Topic根据运营需求,您需要在我们的价值发布系统中添加数字输入框验证功能。我们通常对某些数字输入设置大小限制。例如,要求的值必须在300-347之间(包括300和347)。你很聪明,发现有时候不用等用户打完就可以知道他的输入是否非法。比如上面的例子,当用户输入37时,可以肯定他的输入是非法的。现在您需要以编程方式执行此操作。输入:第一行是输入框的下界第二行是输入框的上界第三行是一些用逗号分隔的整数,这些整数作为用户输入的数字输出:只有一行,这是一些用逗号分隔的字符串。每个字符串对应于用户输入的一个数字。如果用户输入无效,则输出INVALID,否则输出VALID。数字在[1,50]之间,每个数字也在[1,2000000000]之间例1:输入30034737输出INVALID例2:输入3103203,31,317,3174,310,320输出VALID,VALID,VALID,INVALID、VALID、VALID解释:前三个是输入317时输入的序列,所以都是合法的。最后两个是上界和下界,也是法律问题。分析输入大于上限,直接返回INVALID。输入在下限和上限之间,直接返回VALID。只有当输入小于下限时,才会产生校验,所以代码着重于这一步。上限与下限相差1位以上。比如下限31是两位,上限7001是四位,因为输入小于下限31,又因为上下限可以包含所有三位,所以三位都满足条件,所以直接返回VALID的上下限位数相同的情况,只需要将上下限缩短到和输入的数字一样长(右边去掉),那么输入必须必须在缩短的上下限之间才能返回VALID,否则无论你输入后数字如何相加,都不能保证在上下限之间。当上下限之差正好为1位时,上限第一位小于上限第一位。比如下限是50,上限是618。因为输入的是小于50,所以可以在输入后加一个数字,就会大于50,小于618。直接返回下限VALID的第一个数字大于等于上限的第一个数字,上下限数字也被缩短为与输入数字相同的长度(从右边删除)。此时必须保证输入大于等于缩短的下限,或者小于等于缩短的上限(此时缩短下限>缩短的上限)返回VALID,否则你在输入后添加任何数字都是非法的。在其他情况下,它将返回INVALID代码来实现constreadline=require('readline');constrl=阅读线。createInterface(process.stdin,process.stdout);让min=0;让minLen=0;让max=0;让maxLen=0;让strArr=null;让outputArr=[];letindex=0;rl.on('line',function(line){if(index===0){min=parseInt(line);if(min<1||min>12000000000){console.log('输入错误!');rl.close();}minLen=line.length;}if(index===1){max=parseInt(line);if(max<1||max>12000000000){console.log('输入错误!');rl.close();}if(min>max){console.log('上限不能小于下限!');rl.close();}maxLen=line.length;}if(index===2){strArr=l分割线(',');constlen=strArr.length;if(len<1||len>50){console.log('输入错误!');rl.close();}for(conststrofstrArr){constnum=parseInt(str);if(num<1||num>12000000000){console.log('输入错误!');rl.close();}//大于上限直接返回INVALIDif(num>max){outputArr.push('INVALID');继续;}//大于等于下限小于等于上限直接返回VALIDif(num<=max&&num>=min){outputArr.push('VALID');继续;}//如果小于下限//如果上下限之差大于1,直接返回VALIDif(maxLen-minLen>1){outputArr.push('VALID');继续;}//上下限次数相等的情况,即maxLen=minLen;constlen=str.length;constoffsetMin=String(min).slice(0,len);constoffsetMax=String(max).slice(0,len);如果(maxLen===minLen&&str>=关闭tMin&&str<=offsetMax){outputArr.push('有效');继续;}//上下限位相差1位if(maxLen-minLen===1){//下限位第一位小于上限位位if(String(min)[0]=offsetMin||str<=offsetMax){outputArr.push('VALID');继续;}}//其他情况outputArr.push('INVALID');}console.log(outputArr.join(','));rl.close();}index++;}).on('close',function(){//一定要退出,否则执行会超时process.exit(0);});总结这段代码贯穿了测试端的所有测试用例,并且没有超过响应时间限制。同学们可以作为参考。有其他更好想法的朋友欢迎留言分享