力扣T171

为什么

public int titleToNumber(String columnTitle) {int number = 0;
       int sum = 0;
       for (int i = 0; i < columnTitle.length(); i++) {

           int temp = (int) (columnTitle.charAt(i) -64);
           System.out.println(temp);
           double sum1 = temp * Math.pow(26, columnTitle.length() - 1 - i);
           System.out.println(sum1);
           sum+= sum1;

       }
       return sum;
   }

 public static int titleToNumber(String columnTitle) {
        int sum = 0;
        for (int i = 0; i < columnTitle.length(); i++) {

            sum = sum * 26 + (columnTitle.charAt(i) - 64);

        }
        return sum;
    }

的效率高?

两者之间的主要差异在于他们的计算方法,但他们都用于将Excel的列标题(如"A", "Z", "AA"等)转换为对应的整数。让我们分析一下它们的性能差异。

  1. 第一个方法 (titleToNumber with Math.pow):

    • 对于每个字符,你使用Math.pow(26, columnTitle.length() - 1 - i)来计算权重。Math.pow()是一个相对耗时的操作,尤其是在循环中多次调用它。
  2. 第二个方法:

    • 你直接通过sum = sum * 26 + (columnTitle.charAt(i) - 64);的方式更新总和。这样做的复杂度是O(1)。

当我们比较这两个方法时:

  • 对于第一个方法,你为每个字符都调用了Math.pow(),这增加了其时间复杂度。因此,尽管两种方法在高层面上都是O(n)的,其中n是columnTitle的长度,但由于Math.pow()的开销,第一个方法的实际执行时间会更长。

  • 第二个方法更为直接和简洁,它避免了额外的计算开销。

因此,第二种方法的性能优于第一种方法。如果你在考虑性能,那么应该选择第二种方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杪秋

一个计算机小白,期待您的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值