leetcode-동적 기획 3
class Solution {
public boolean wordBreak(String s, List<String> wordDict)
{
//dp[n]=dp[n]||dp[n-word]
boolean []dp=new boolean [s.length()+1];
for(int i=1;i<=s.length();i++)
dp[i]=false;dp[0]=true;
for(int i=1;i<=s.length();i++){
for(String word:wordDict){
if(i-word.length()>=0&&dp[i]==false) {
String temp=s.substring(0,i);
if(temp.equals(s.substring(0,i-word.length())+word))
dp[i]=dp[i]||dp[i-word.length()];// dp[i] }
}}
return dp[s.length()]; } }
300. 최장 상승 서열은 무질서한 정수 그룹을 정하고 그 중에서 가장 긴 상승 서열의 길이를 찾습니다.이와 유사하게 dp[i]는 i의 가장 긴 길이를 기록한 다음에 여기에 여러 n-1보의 상황이 나타나지 않는다. 이 수보다 작은 그 수의 길이를 1로 늘리기만 하면 된다.
class Solution {
public int lengthOfLIS(int[] nums) {
//dp[n]=dp[n-1]+1 nums[n]>nums[n-1]
//dp[0]=1;
if(nums.length==0)
return 0;
int dp[]=new int [nums.length];
dp[0]=1;int maxlen=1;
for(int i=1;i<nums.length;i++)
{
int j=i-1;dp[i]=1;int max=0;
while(j>=0)
{
if(nums[j]<nums[i])
max=Math.max(max,dp[j]);
j--; }
dp[i]=max+1;
maxlen=Math.max(dp[i],maxlen); }
return maxlen; }}
91. 디코딩 방법 중 알파벳 A-Z가 포함된 메시지는 다음과 같은 방식으로 인코딩되었다.'A'->1'B'->2... 이 문제도 dp[i]에서 i위를 기록하는 몇 가지 인코딩이 있다. 이 문제는 사실 모든 것이 하나의 가능성이 있다. 바로 n위가 확정된 것이다. n-1위와의 조합은 하나의 결과이기 때문에 두루 훑을 필요가 없다. 그러나 이런 문제는 많은 상황을 고려해야 하기 때문에 상태 방정식을 잘 고려해야 한다.dp[i]=dp[i-2] i=0&(i-1=1|i-1=2) dp[i]=dp[i-1]+dp[i-2] (i-1=1|i-1=2&<0i<7)&i!=0 dp[i]=dp[i-1] otherwise
class Solution {
public int numDecodings(String s) {
int []res=new int [s.length()+1]; res[0]=1; if(s.charAt(0)!='0') {
res[1]=1;} else return 0; for(int i=1;i<s.length();i++) {
if(s.charAt(i)=='0') {
if(s.charAt(i-1)=='1'||s.charAt(i-1)=='2') res[i+1]=res[i-1]; else return 0;} else if(s.charAt(i-1)=='1'||(s.charAt(i-1)=='2'&&s.charAt(i)>'0'&&s.charAt(i)<'7')) res[i+1]=res[i-1]+res[i]; else res[i+1]=res[i]; } return res[s.length()]; }}
152. 곱셈이 가장 큰 서열은 정수 수조nums를 정하고 한 서열에서 곱셈이 가장 큰 연속 서열을 찾아낸다(이 서열은 최소한 한 개의 수를 포함한다).이 문제 해법은 좀 까다로워서 공부를 했다
class Solution {
public int maxProduct(int[] nums) {
int max=1,min=1,maxlen=Integer.MIN_VALUE; for(int i=0;i<nums.length;i++) {
if(nums[i]<0) {
int temp=min; min=max; max=temp; } max=Math.max(nums[i]*max,nums[i]); min=Math.min(nums[i]*min,nums[i]); maxlen=Math.max(max,maxlen); } return maxlen; }}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
0부터 시작하는 LeetCode Day8 「1302. Deepest Leaves Sum」해외에서는 엔지니어의 면접에 있어서 코딩 테스트라고 하는 것이 행해지는 것 같고, 많은 경우, 특정의 함수나 클래스를 주제에 따라 실장한다고 하는 것이 메인이다. 빠른 이야기가 본고장에서도 행해지고 있는 것 같은 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.