Skip to content

Latest commit

 

History

History
101 lines (85 loc) · 2.72 KB

171.md

File metadata and controls

101 lines (85 loc) · 2.72 KB

✏️Leetcode之PHP版题目解析(171. Excel Sheet Column Number)

2019-09-25 吴亲库里 库里的深夜食堂


✏️描述

给定execl的行列,转换为具体的对应的数字。


✏️题目实例

✏️题目分析

给定execl的行列,转换为具体的对应的数字

    /**
     * @param String $s
     * @return Integer
     */
    function titleToNumber($s) {
    $arr=[];
    $arr["A"]=1;        
    $arr["B"]=2;
    $arr["C"]=3;
    $arr["D"]=4;
    $arr["E"]=5;
    $arr["F"]=6;
    $arr["G"]=7;
    $arr["H"]=8;
    $arr["I"]=9;
    $arr["J"]=10;
    $arr["K"]=11;
    $arr["L"]=12;
    $arr["M"]=13;
    $arr["N"]=14;
    $arr["O"]=15;
    $arr["P"]=16;
    $arr["Q"]=17;
    $arr["R"]=18;
    $arr["S"]=19;
    $arr["T"]=20;        
    $arr["U"]=21;
    $arr["V"]=22;
    $arr["W"]=23;
    $arr["X"]=24;
    $arr["Y"]=25;
    $arr["Z"]=26;
        $sArr=str_split($s);
        $res=0;
        $muttle=1;
        for($i=count($sArr)-1;$i>=0;$i--){
            $res +=$arr[$sArr[$i]]*$muttle;
            $muttle *=26;
        }
        
        return $res;     
    
    }

✏️解法二

我们也可以这样解,这是一个求众数(即上面所称呼的多数元素)的问题,有一种叫做摩尔投票法(Google一下)适合解这类题目。我们可以先将第一个数当成众数,然后设置计数器等于1,如果当前的数和众数等值,那么计数器加1,否则计数器减去1,如果计数器等于0的话,说明当前还不是众数的个数都和众数的个数相同了,那么我们就需要更换众数了,如果我们更换了众数,但是后面当前更换的众数又大量出现,那么他就重新变成了众数,直到验证完毕。求出众数。

 /**
     * @param Integer[] $nums
     * @return Integer
     */
    function majorityElement($nums) {
     
        $count=1;
        $current=$nums[0];
        for($i=1;$i<count($nums);$i++){
            $val=$nums[$i];
            if($val !==$current) {
                --$count;
            }else{
                ++$count;
            }
            if($count==0) {
                $current=$nums[$i];
                $count=1;
            }
        }
        return $current;
         
    }

联系