算法题 |
算法刷题专栏 | 面试必备算法 | 面试高频算法
越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
作者简介:硕风和炜,CSDN-Java领域新星创作者,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享
恭喜你发现一枚宝藏博主,赶快收入囊中吧
人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?
算法题 |
给你一个正整数 n ,请你返回 n 的 惩罚数 。
n 的 惩罚数 定义为所有满足以下条件 i 的数的平方和:
1 <= i <= n
i * i 的十进制表示的字符串可以分割成若干连续子字符串,且这些子字符串对应的整数值之和等于 i 。
示例 1:
输入:n = 10
输出:182
解释:总共有 3 个整数 i 满足要求:
输入:n = 37
输出:1478
解释:总共有 4 个整数 i 满足要求:
提示:
1 <= n <= 1000
class Solution {
public int punishmentNumber(int n) {
int ans=0;
for(int i=1;i<=n;i++){
int num=i*i;
if(process(String.valueOf(num),0,0,i)){
ans+=num;
}
}
return ans;
}
public boolean process(String s,int i,int sum,int target){
int n=s.length();
if(i>=n) return sum==target;
for(int j=i;j<n;j++){
int num=Integer.parseInt(s.substring(i,j+1));
if(num+sum<=target&&process(s,j+1,sum+num,target)){
return true;
}
}
return false;
}
}
最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉! |