判断一个自然数是否是一个平方数 - 算法与数据结构面试分享 (三十三)

最近因为工作很忙,很久没有写文章了。看着公众号里关注的朋友越来越多,感觉动力又来了。今天看一道简单的题目,从这个过程中大家一起探讨下它优化的过程,或许我们还有更好的解决方案。

给定问题:给定一个自然数,请帮我判断是否是某个自然数的平方。当然开方运算是不可以使用的!

初识问题:这个问题很简单,给定的自然数是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;

            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值