最近因为工作很忙,很久没有写文章了。看着公众号里关注的朋友越来越多,感觉动力又来了。今天看一道简单的题目,从这个过程中大家一起探讨下它优化的过程,或许我们还有更好的解决方案。
给定问题:给定一个自然数,请帮我判断是否是某个自然数的平方。当然开方运算是不可以使用的!
初识问题:这个问题很简单,给定的自然数是N,判断是否存在K,0<=K<=N, 使得K^2 =N. 如果使用开方运算的话,K=Sqrt(N), 我们只需要判断K是否为整数就好了对吧。话说这个该怎么判断呢?大家都知道,这样的运算里都是有一个容忍度的对吧,我们可以将它转成整形,再做差,或者放大,或者直接转字符串,总之方法很多,这里不是重点,我们不再展开了。
1. 考编码的方式:
直接一个循环,每个有做下平方运算,然后去比较。如果找到了返回,如果结果比目标数还大,意味着永远也找不到了。我们约定下,找不到的时候返回-1. 这个答案可以接受,也没有什么大的毛病(其实毛病还是有的,接着往下看)。但只能表现出我们会写代码而已。
public static int Scan(int target)
{
if (target < 0) return -1;
for(int index = 0; index <=target; index++)
{
int t = index * index;