为什么
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"等)转换为对应的整数。让我们分析一下它们的性能差异。
-  
第一个方法 (
titleToNumberwithMath.pow):- 对于每个字符,你使用
Math.pow(26, columnTitle.length() - 1 - i)来计算权重。Math.pow()是一个相对耗时的操作,尤其是在循环中多次调用它。 
 - 对于每个字符,你使用
 -  
第二个方法:
- 你直接通过
sum = sum * 26 + (columnTitle.charAt(i) - 64);的方式更新总和。这样做的复杂度是O(1)。 
 - 你直接通过
 
当我们比较这两个方法时:
-  
对于第一个方法,你为每个字符都调用了
Math.pow(),这增加了其时间复杂度。因此,尽管两种方法在高层面上都是O(n)的,其中n是columnTitle的长度,但由于Math.pow()的开销,第一个方法的实际执行时间会更长。 -  
第二个方法更为直接和简洁,它避免了额外的计算开销。
 
因此,第二种方法的性能优于第一种方法。如果你在考虑性能,那么应该选择第二种方法。










