数位之积
https://www.nowcoder.com/questionTerminal/f9b86bcd95a643138f9593966a5495b8
现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位 … …)之乘积等于n,若不存在则输出 -1。
示例1
输入
36
输出
49
示例2
输入
100
输出
455
解题思路,如果存在这样的整数 那么一定是每一位都是[2-9],同时是一种贪心的思想,数值越大的一定放在越小位
public class Solution {
/**
* 输入一个整形数值,返回一个整形值
*
* @param n int整型 n>9
* @return int整型
*/
public int solution(int n) {
// write code here
StringBuilder sb = new StringBuilder();
while (n!=1) {
int i=9; //为什么循环从9开始不从2开始就是贪心的思想
for (; i > 1; i--){ //在9-2试探
if(n%i==0){
sb.append(i);
n/=i;
break;
}
}
if(i==1) //代表不存在这样的数
return -1;
}
return Integer.parseInt(sb.reverse().toString());
}
}
拆礼盒
链接:https://www.nowcoder.com/questionTerminal/916c1446d019459f94743443f71b3e70
来源:牛客网
小v所在的公司即将举行年会,年会方案设计过程中必不可少的一项就是抽奖活动。小v在本次活动中被委以重任,负责抽奖活动的策划;为了让中奖的礼物更加精美且富有神秘感,打算采用礼品盒来包装奖品,此时小v发挥了自己的创意想捉弄一下获奖的同事,便采取了多重包装来包装奖品。
现给出一个字符串,并假定用一对圆括号( )表示一个礼品盒,0表示奖品,你能据此帮获奖者算出最少要拆多少个礼品盒才能拿到奖品吗?
示例1
输入
(()(()((()(0)))))
输出
5
import java.io.*;
/**
* Welcome to vivo !
*/
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputStr = br.readLine();
int output = solution(inputStr );
System.out.println(output);
}
private static int solution(String str) {
char[] charArray=str.toCharArray();
int ret=0;
for(int i=0;i<charArray.length;i++){
if(charArray[i]=='0')
break;
else{
ret++;
//思路,在遇到0之前 凡是有)这个括号的 都要减去()两个字符
if(charArray[i]==')'){
ret-=2;
}
}
}
return ret;
// TODO Write your code here
}
}