騰訊 數字排列

2021-05-24 08:21:54 字數 2696 閱讀 8254

宣告:題目來自:http://blog.csdn.net/v_july_v/archive/2010/11/17/6015165.aspxhttp://blog.csdn.net/v_july_v/archive/2011/01/10/6126406.aspx自己先做一遍。

題目:

初看此題,貌似很難,10分鐘過去了,可能有的人,題目都還沒看懂。  

舉乙個例子,  

數值: 0,1,2,3,4,5,6,7,8,9  

分配: 6,2,1,0,0,0,1,0,0,0  

0在下排出現了6次,1在下排出現了2次,  

2在下排出現了1次,3在下排出現了0次....  

以此類推..

思路:

說實話,第一遍看題目我還真沒有看懂,看了下面的例子我才看懂的。brute-force肯定是不行的,每個位置都可以放置0-9之間的任何數,也就是說死遍歷的話一共有 1010 種可能性。

給定的數列是[0 1 2 3 4 5 6 7 8 9], 一共10個數,10個位置,所以5,6,7,8,9 對應的位置都不可能是》=2, 原因是如果5下面放置2,意味著 5 在下面要出現2次,假設a和b下面是5,那麼a要出現5次,b要出現5次,已經是10個位置被佔了,如果a和b都不等於2,那麼至少已經11個位置了(a5個,b5個,2 乙個); 如果a=2,那b出現5次,2出現5次(其中包括5下面的那個2),這個時候6,7,8,9下面都必須是0(假設6下面是1,那5要出現2次,6要出現1次,一共11個位置了), 也就是說b=0, 好, 0 出現5次,2出現5次 --> 可能嗎?無論你讓除6,7,8,9外的任何數下面是2,都不成立!

所以我們得出:

1: 5,6,7,8,9 下面只能是0或者1, 並且只能有乙個位置是1,其他的位置必須為0。

那可以讓5,6,7,8,9 下面都是0嗎?不行,如果這樣,0就已經出現了5次,那上排0下面的數字至少是5,也就是5出現了1次,和5下面是0矛盾!也就是說:

2: 5,6,7,8,9 下面必須也僅有乙個數字下面是1,其餘都是0,上排0位置下面至少是4。

如果5,6,7,8,9之間有乙個是1,那t[1] 至少是1 (我以t表示我們要得到的數列), 但是t[1]不能是1,因為t[5...9]之間已經有1個1,如果t[1]再=1, t中就有兩個1,所以t[1]至少是2 ! 如果t[1]是2,則t[2]是1, 因為2出現了一次。那到目前為止:

t[0] >=4, t[1]=2, t[2]=1, t[5...9] 之間有1個1,4個0, 只剩t[3],t[4]沒有定了。注意 t[5...9]中選中的那1個5...9放在**呢?有3個選擇: t[0], t[3] 或者t[4] (條件是0至少4個,2乙個,1兩個 --> 7個位置佔掉了),所以只能放在t[0], 於是:

t[0]=5...9, t[1]=2, t[2]=1, t[5...9] 之間1個1,4個0, 還剩兩個位置t[3],t[4],放0, 所以10個位置-1個位置(5到9之間的那個1)- 2個位置(t[1]和t[2]) - 1個位置(t[0]) = 6, 0 可以放6個,所以t[0]=7, t[3]=t[4]=0.

所以: 計算步驟是 -->

**:

public class tengxunnumberpicker

system.out.print("1st line is: ");

print(firstline);

secondline[1] = 2;

secondline[2] = 1;

final int numberofone = 2;

final int numberoftwo = 1;

final int numberofx = 1;  // x is between n/2 to n-1

int numberofnonezero = numberofone + numberoftwo + numberofx;

int numberofzero = n - numberofnonezero;

secondline[0] = numberofzero;

secondline[numberofzero] = 1;

system.out.print("2nd line is: ");

print(secondline);

system.out.println();

}public static void print(int array)

system.out.println();

}public static void main(string args)

}輸出:

1st line is:    0  1  2  3  4  5  6  7  8  9

2nd line is:   6  2  1  0  0  0  1  0  0  0

1st line is:     0  1  2  3  4  5  6  7  8  9 10 11 12 13 14

2nd line is:  11  2  1  0  0  0  0  0  0  0   0   1   0   0   0

leetcode 騰訊 全排列

原題 給定乙個沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 分析 首先從列表的第乙個元素開始,將其放到第一位 然後copy列表,將該元素刪掉,在新得到的列表中一次將元素填在後面 def permute...

排列數字問題

數字排列問題 今有7對數字 兩個1,兩個2,兩個3,兩個7,把它們排成一行。要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是乙個符合要求的排列 17126425374635 當然,如果把它倒過來,也是符合要求的。請你找出另一種符合要求的排列法,並且這...

數字全排列

public class arrayrank private int n numbers.length 用來標記圖中結點是否被遍歷過 private boolean visited new boolean n 圖的二維陣列表示 private int graph new int n n 數字的組合 ...