目錄
一、計算數字
二、最少劃分子串
三、鏡面反射
一、計算數字
難度:簡單
題目描述
給出一個十進制數num,現在你需要把它轉成二進制數,并回傳1的個數和位置,
- n<=10^9
示例
例1:
輸入: 10
輸出: [2,1,3]
解釋: 10轉成2進制為1010,總共有2個1,所以ouptput陣列第一個是2,然后1的位置是第1個和第3個,所以后續兩個數為1,3.
例2:
輸入: 7
輸出: [3,1,2,3]
解釋: 7轉成2進制為111,總共有3個1,所以output陣列第一個是3,然后的位置是第1個、第2個和第3個,所以后續三個數為1,2,3.
我的題解:
public class Solution {
/**
* @param num: the num
* @return: the array subject to the description
*/
public int[] calculateNumber(int num) {
int t, x, y = 0, i;
String s = "";
x = num;
while (x != 0) {
t = x % 2;
x /= 2;
if (t == 1)
y++;
s = t + s;
}
// System.out.println(s);
int[] r = new int[y + 1];
r[0] = y;
int j=1;
for (i = 0; i < s.length(); i++) {
if (s.charAt(i) == '1')
r[j++] = i + 1;
}
return r;
}
}
二、最少劃分子串
難度:簡單
題目描述
Given a string containing
nlowercase letters, the string needs to be divided into several continuous substrings, the letter in the substring should be same, and the number of letters in the substring does not exceedk, and output the minimal substring number meeting the requirement.翻譯:給定一個包含n個小寫字母的字串,需要將該字串分成幾個連續的子串,子串中的字母必須相同,且子串中的字母個數不超過k,并輸出滿足要求的最小子串數,
- n≤1e5
示例
樣例1
輸入: s = "aabbbc", k = 2
輸出: 4
解釋:
劃分成 "aa", "bb", "b", "c" 四個子串
樣例2
輸入: s = "aabbbc", k = 3
輸出: 3
解釋:
劃分成 "aa", "bbb", "c" 三個子串
題目直接看示例理解簡單,
我的題解:
public class Solution {
/**
* @param s: the string s
* @param k: the maximum length of substring
* @return: return the least number of substring
*/
public int getAns(String s, int k) {
int l = 0, c = 0, i, j;
while (c < s.length() - 1) {
j = c + 1;
i = 1;
while (i < k && j<s.length()-1&&s.charAt(c) == s.charAt(j)) {
j++;
i++;
}
l++;
c += i;
}
if (s.charAt(s.length()-1)!=s.charAt(s.length()-2))
l+=1;
return l;
}
}
三、鏡面反射
難度:中等
題目描述
有一個特殊的正方形房間,每面墻上都有一面鏡子,除西南角以外,每個角落都放有一個接受器,編號為
0,1,以及2,正方形房間的墻壁長度為
p,一束激光從西南角射出,首先會與東墻相遇,入射點到接收器0的距離為q,回傳光線最先遇到的接收器的編號(保證光線最侄訓遇到一個接收器),
- 1<=p<=1000
- 0<=q<=p
示例

樣例 1:
輸入: p = 2, q = 1
輸出: 2
解釋: 這條光線在第一次被反射回左邊的墻時就遇到了接收器 2 ,
樣例 2:
輸入: p = 3, q = 1
輸出: 1
解釋: 這條光線在第一次被反射回左邊的墻時就遇到了接收器 1 ,
解決方法可以是找規律,通過畫圖找出鏡面反射光線到達接收器的幾種情況,
p/q=1,到達1;p/q=2,到達2;p/q=3,到達1;p/q=4,到達2;……(此處除法表示整除)
那當p=3,q=2時,p/q=3/2,到達哪個呢?
手動作圖發現,到達0,

由此會想到,整除得1,到接收器1;整除得2,到接收器2;其他非整除結果,到接收器0,
但是,這樣并不能說3種情況已經考慮完全,就對應每個接收器情況,
比如,p=5,q=3,p/q=5/3,實際會到達接收器1,不符合以上假定規律,所以進一步尋找規律!
找到規律是:
- p為奇數,q為奇數時,到達接收器1,
- p為奇數,q為偶數時,到達接收器0,
- p為偶數,q為奇數時,到達接收器2,
p、q都為偶數的情況可以通過約分,變為一奇一偶,等同于上述中一種情況,
public class Solution {
/**
* @param p: an integer
* @param q: an integer
* @return: the number of the receptor that the ray meets first
*/
public int mirrorReflection(int p, int q) {
if(p%2==1&&q%2==1)
return 1;
else if(p%2==1&&q%2==0)
return 0;
else
return 2;
}
}
第一次嘗試在阿里天池的在線編程答題,也是第一次用Java答題,這篇主要寫一下第3個題目:鏡面反射的思路和解答結果,對于第1、2個題目相對簡單,可以從代碼中容易看出解答的方法,
如果覺得不錯歡迎“一鍵三連”哦,點贊收藏關注,有問題直接評論,交流學習!
我的CSDN博客:https://blog.csdn.net/Charzous/article/details/113444688
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/255203.html
標籤:java
下一篇:什么是Lock執行緒鎖?與synchronized區別在哪?Lock鎖是如何實作等待通知的?如何實作執行緒順序執行?
