vivo2020屆春季校園招聘手機螢幕解鎖模式

2021-10-05 13:39:01 字數 2106 閱讀 2872

現有乙個 3x3 規格的 android 智慧型手機鎖屏程式和兩個正整數 m 和 n ,請計算出使用最少m 個鍵和最多 n個鍵可以解鎖該螢幕的所有有效模式總數。

其中有效模式是指:

1、每個模式必須連線至少m個鍵和最多n個鍵;

2、所有的鍵都必須是不同的;

3、如果在模式中連線兩個連續鍵的行通過任何其他鍵,則其他鍵必須在模式中選擇,不允許跳過非選擇鍵(如圖);

4、順序相關,單鍵有效(這裡可能跟部分手機不同)。

輸入:m,n

代表允許解鎖的最少m個鍵和最多n個鍵

輸出:滿足m和n個鍵數的所有有效模式的總數

輸入例子1:

1,2

輸入例子1:

輸入例子1:

輸入m=1,n=2,表示最少1個鍵,最多2個鍵,符合要求的鍵數是1個鍵和2個鍵,其中1個鍵的有效模式有9種,兩個鍵的有效模式有56種,所以最終有效模式總數是9+56=65種,最終輸出65。

在編寫過程中,我突然發現其實輸入9,9其實和8,8是一樣的可能性,也就是其實8和9就是一樣可能性的,因為最後9x8x7x6x5x4x3x2=9x8x7x6x5x4x3x2x1。也就是說輸入1,9其實等於1,8加上8,8的所有可能性。

**如下**片.

// an highlighted block

//預設是flase,如果為true代表被選擇。

public

static boolean select=

newboolean[10

];//寫出所有無效的路線

public

static string numberstr=

;//與無效路線集合下標對應,值為穿過的點

public

static string pont=

;public

static int solution

(int m, int n)

int tot =0;

if(n==

9&&m<

9||n>

9&&m<9)

else

tot=

allselect

(m,n)-(

4*cal(m,n,1,

1,"")

+4*cal

(m,n,2,

1,"")

+cal

(m,n,5,

1,"")

);;}

return tot;

}public

static int allselect

(int m,int n)

if(n>9)

while

(initm>0)

else

maxselect = maxselect-1;

initm--;}

if((m+1

)<=initn)

return total;

}public

static int cal

(int m,int n,int start,int end,string str)

if(end>=m&&path.

length()

>

1&&end

} j++;}

} select[start]

=true

;for

(int i =

1;i<

10;i++)if

(!select[i]

&&end==n&&n>1)

} j++;}

}}select[start]

=false

;return count;

}

該方法參考了中的解題思路,不同的是本方法是算所有可能性包括無效模式再減去無效的模式,參考方法是直接計算所有有效的模式。

2020屆校園招聘360筆試題

1 尋找子串 思路 重複的最多的子字串,那肯定是單個字元重複的最多就行了 轉化為求單個字元出現次數最多 ss input ls s for s in ss p set ls max 0 for c in p if ls.count c max max ls.count c print max 2 散...

vivo2020春校招 數字之積

現給定任意正整數 n,請尋找並輸出最小的正整數 m m 9 使得 m 的各位 個位 十位 百位 之乘積等於n,若不存在則輸出 1。最原始的想法是遍歷,由於這個數一定不小於n,於是從n開始累加,然後轉化為字元陣列,計算積,判斷 這個方法很傻,而且很難設定終止條件。public int solution...

vivo2020春招 02 數字之積

現給定任意正整數 n,請尋找並輸出最小的正整數 m m 9 使得 m 的各位 個位 十位 百位 之乘積等於n,若不存在則輸出 1。對於n,找出2 9中所有能被它整除的數,然後組合成乙個最小的整數即可 輸入乙個整形數值,返回乙個整形值 param n int整型 n 9 return int整型 cl...