今天刷牛客網時,有一點編程題,各位大佬都是發現規律的。我就來一個代碼實現,若有出錯,歡迎指點批評。
題目:
鏈接:https://www.nowcoder.com/questionTerminal/6a6a0e4d6dfa4d89acd73bdfec79cf28?toCommentId=4887139來源:牛客網
輸入描述:
海報冊子的字符串表示,1 <= 字符串長度<= 20
輸出描述:
一個整數,表示可以組成的不同的海報冊子種類數
示例1
輸入
a
輸出
51
說明
我們可以組成 'ab','ac',...,'az','ba','ca',...,'za' 還有 'aa', 一共 51 種不同的海報冊子。
代碼實現:
package cn.bubbletg2.t01;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String s = new Scanner(System.in).next();
int length = s.length();
if (length < 1 || length >= 20) return;
int j = 0;
for (int i = 1; i <= 26; i++) {
/**
* length + 1 表示每次可以插入位置個數, 只有一個 a -a- 可以 ab 或者ba 兩個位置
* 長度爲2時。 -a-b- 插入位置爲3
*
* 爲什麼要26次?因爲題目中已經給出 aa 也算,所有 其實相當於26個都可以進行。
*/
j += (length + 1);
}
/**
*爲什麼j- length 如題, _a_ 可以前後兩個位置插入,但是插入a 時, aa 與 aa 算同一個
* 若 _a_b_ 我們插入一個a 可能結果有 aab aab aba 我們在插入一個b aab abb abb
* 可以發現: aab 與 aab 和 abb abb 重複了 長度爲多少,重複多少次。所以減去長度。
*/
System.out.println(j - length);
}
}